
Ich habe ein systemd-Skript, das wie folgt lautet:
[Unit]
Description=My sites
Before=shutdown.target reboot.target halt.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c '/etc/xxx/mySites start'
ExecStop=/bin/bash -c '/etc/xxx/mySites stop'
KillMode=none
SendSIGKILL=no
TimeoutStopUSec=5min
TimeoutSec=5min
TimeoutStopSec=5min
[Install]
WantedBy=multi-user.target
Wenn ich jetzt versuche, es auszuführen, sudo systemctl start mySites.service
scheint der Dienst ausgeführt zu werden und alle meine Sachen werden korrekt gestartet. Wenn ich ein mache, stop
funktioniert es auch. Dann startet es beim Booten des Betriebssystems auch korrekt. Das Problem liegt beim Herunterfahren des Betriebssystems. Ich starte es neu und es scheint, als ob ExecStop
auch WAS aufgerufen wurde ... aber zu spät ... Ich sehe in den Protokollen, dass alle meine Prozesse beendet wurden, wie ich in meinen Protokollen sehen kann:
signal 15, SIGTERM, received from process 1 userId 0
si_code: 0, SI_USER, signal from kill(2), sigsend(2), raise(3C) or abort(3C)
si_signo 15 si_errno 0
Also … ExecStop
scheint zu spät aufgerufen zu werden, da jemand die Prozesse, die ich ursprünglich gestartet habe, bereits beendet hat. Dennoch stelle ich bereits ein Before=shutdown.target reboot.target halt.target
.
Ich denke , das Problem könnte sein, dass meins länger ExecStop
als das Standard-Timeout dauern kann und systemd daher am Ende SIGTERM sendet. Nun... habe ich und sogar alle möglichen Timeouts auf 5 Minuten eingestellt und (meins dauert mit Sicherheit weniger als 5 Minuten).KillMode=none
SendSIKKILL=no
TimeoutStopUSec
TimeoutSec
TimeoutStopSec
ExecStop
Immer noch kein Glück.
Irgendeine Idee, wie ich das beheben kann? Ich verwende CentOS 7.
Dank im Voraus,
Antwort1
Versuchen
[Unit]
Description=My sites
After=NetworkManager.service
Requires=NetworkManager.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c '/etc/xxx/mySites start'
ExecStop=/bin/bash -c '/etc/xxx/mySites stop'
RemainAfterExit=true
[Install]
WantedBy=multi-user.target