Ich verwende systemd
auf Raspbian, um ein Python-Skript script.py
auszuführen. Die my.service
Datei sieht wie folgt aus:Linux: Machen Sie systemd sofort ein laufendes Python-Skript beenden?
[Unit]
Description=My Python Script
Requires=other.service
[Service]
Restart=always
ExecStart=/home/script.py
ExecStop=/home/script.py
[Install]
WantedBy=multi-user.target
Wenn die Required=other.service
stoppt, ich will my.service
sofort stoppen und auch Python-Prozess läuft script.py
beenden.
Wenn dies jedoch durch other.service
Stoppen Ausprobieren und Überwachung dann den Zustand der my.service
systemctl
verwenden, scheint es, wie es gut, während nimmt für my.service
tatsächlich eintreten a ‚fehlgeschlagen‘ Zustand (angehalten). Es scheint, dass der Aufruf ExecStop
an das Skript ist nicht genug, um my.service
selbst und die anschließende script.py
in einer Minute zu beenden.
Nur um zusätzliche klar: Ich möchte das Skript ziemlich sofort in einer Art und Weise zu beenden, die zu Ctrl +C analog ist. Grundlegende Python-Bereinigung ist in Ordnung, aber ich möchte nicht systemd
warten auf eine 'anmutige' Antwortzeit oder so etwas.
Fragen:
- Ist meine Interpretation der Verzögerung richtig, oder ist es nur
systemctl
, die ihre Statusübersicht aktualisieren langsam ist? - Was ist der empfohlene Weg, um den Dienst zu stoppen und das Skript zu beenden. Sollte ich eine Art von
SIGINT
im Python-Skript einfangen? Wenn das so ist, wie? Oder gibt es etwas, das inmy.service
getan werden kann, um das Beenden des Dienstes und das Töten des Skripts zu beschleunigen?
Haben Sie versucht, mit 'BindsTo' statt' Requires'? –
@DougLuce Das sieht im Allgemeinen wie ein guter Vorschlag aus. Aber ich habe es jetzt versucht, und der Zustand von in 'systemctl' ist immer noch 'my.service loaded deactivating stop' für mindestens eine Minute, bevor es 'loaded failed failed' wird. – Winterflags
Dies ist hier nicht verfügbar. – edmz