У меня есть сценарий systemd, который выглядит следующим образом:
[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
Теперь ... если я попытаюсь выполнить sudo systemctl start mySites.service
кажется, служба запущена, и все мои вещи запускаются правильно. Если я сделаю stop
это тоже работает. Потом при загрузке ОС тоже запускается правильно. Проблема в выключении ОС. Я его перезагружаю и вроде бы ExecStop
WAS тоже был вызван ... но слишком поздно ... Я вижу в журналах, что все мои процессы получили уничтожение, как я могу видеть в своих журналах:
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
Так..ExecStop
кажется, вызывается слишком поздно, потому что кто-то уже убил процессы, которые я изначально запустил. Тем не менее, я уже устанавливаю Before=shutdown.target reboot.target halt.target
.
Думаю, проблема в том, что мой ExecStop
может занять больше времени, чем таймаут по умолчанию, и, следовательно, systemd отправляет SIGTERM. Теперь ... я поставил KillMode=none
, SendSIKKILL=no
и даже все возможные таймауты до 5 минут до TimeoutStopUSec
, TimeoutSec
и TimeoutStopSec
(наверняка мой ExecStop
занимает менее 5 минут).
По-прежнему не повезло.
Есть идеи, как я могу это исправить? Я использую CentOS 7.
Заранее спасибо,
Пытаться
[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