- 'on' fing bisher nur einen bereits laufenden, aber toten Dienst ab. Scheiterte schon der Aufruf "systemctl start" selbst (z.B. start-limit-hit nach einer Absturzserie durch Restart=always), beendete set -eu das Skript dort, bevor die Lebendigkeitspruefung je erreicht wurde - der eben hochgefahrene Zugangspunkt blieb offen ohne Server dahinter stehen. Der Startaufruf wird jetzt selbst abgefangen und faehrt im Fehlerfall dieselbe Rueckabwicklung wie die is-active-Pruefung. "systemctl reset-failed" vor dem Start verhindert, dass eine fruehere Absturzserie den naechsten ehrlichen Versuch blockiert. - Stirbt der Dienst nach einem erfolgreichen Start, stoppt das Skript ihn jetzt explizit, bevor es den Zugangspunkt herunterfaehrt und "abgeschaltet" meldet - sonst haette ein mit Restart=always weiterlaufender Dienst im Hintergrund einen saubereren Zustand suggeriert, als tatsaechlich vorlag. - ninlight-station.service setzt StartLimitIntervalSec/StartLimitBurst jetzt explizit statt sich stillschweigend auf systemds Vorgabewerte zu verlassen, mit Begruendung als Kommentar: ohne Zugangspunkt kann server.py nicht binden und stirbt sofort, Restart=always soll das nach kurzer Zeit ehrlich aufgeben statt das Journal zu fluten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.6 KiB
Desktop File
41 lines
1.6 KiB
Desktop File
[Unit]
|
|
Description=ninlight recovery station (HTTP image server)
|
|
# Ohne den Zugangspunkt hat der Server beim Start keine Adresse zum Binden.
|
|
# Bewusst kein BindsTo=NetworkManager.service: ein dadurch ausgeloester Stop
|
|
# gilt fuer systemd als sauber und wuerde von KEINER Restart=-Politik erneut
|
|
# gestartet - ein NetworkManager-Neustart wuerde den Server dann still und
|
|
# dauerhaft mitreissen. Stattdessen nur Start-Reihenfolge vorgeben und den
|
|
# Prozess bei jedem Absturz (z.B. Bind-Fehler nach einem NM-Neustart) per
|
|
# Restart=always in kurzen Abstaenden neu versuchen lassen.
|
|
After=network.target NetworkManager.service
|
|
# Steht der Zugangspunkt nicht, kann server.py 192.168.8.1 nicht binden und
|
|
# stirbt sofort; Restart=always versucht es alle RestartSec=2 erneut. Damit
|
|
# das nicht endlos das Journal flutet, sondern nach kurzer Zeit ehrlich
|
|
# aufgibt (und ninlight-station dann mit einer klaren Fehlermeldung reagieren
|
|
# kann statt in einer stillen Neustartschleife zu haengen), hier explizit
|
|
# gedeckelt statt sich auf systemds Vorgabewerte zu verlassen.
|
|
StartLimitIntervalSec=30
|
|
StartLimitBurst=5
|
|
|
|
[Service]
|
|
Type=simple
|
|
EnvironmentFile=/etc/ninlight-station.conf
|
|
ExecStart=/usr/bin/python3 /opt/ninlight-station/server.py --image-dir ${IMAGE_DIR}
|
|
Restart=always
|
|
RestartSec=2
|
|
|
|
# Laeuft als root: Port 80 und - fuer 4c - die DHCP-Leases in
|
|
# /var/lib/NetworkManager (Verzeichnis 0700 root:root) sind sonst nicht erreichbar.
|
|
# Gegengewicht:
|
|
NoNewPrivileges=yes
|
|
ProtectSystem=strict
|
|
ProtectHome=yes
|
|
PrivateTmp=yes
|
|
RuntimeDirectory=ninlight-station
|
|
ReadWritePaths=/run/ninlight-station
|
|
RestrictAddressFamilies=AF_INET AF_UNIX
|
|
MemoryMax=128M
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|