
次のような 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
も動作します。その後、OS の起動時にも正しく起動します。問題は OS のシャットダウンにあります。再起動していますが、WAS もExecStop
呼び出されたようですが、遅すぎます... ログを見ると、プロセスがすべて強制終了されたことがわかります。
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
。
問題は、 がデフォルトのタイムアウトよりも長くかかる可能性があり、その結果 systemd が SIGTERM を送信することになるのではないかと思います。現在、 、およびすべての可能なタイムアウトを 5 分にExecStop
設定しており、(は確実に5 分未満で終了します)。KillMode=none
SendSIKKILL=no
TimeoutStopUSec
TimeoutSec
TimeoutStopSec
ExecStop
まだ運がない。
これを修正するにはどうすればいいでしょうか? CentOS 7 を実行しています。
前もって感謝します、
答え1
試す
[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