
我有一個 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
它也有效。然後,當作業系統啟動時,它也可以正確啟動。問題出在作業系統關閉。我正在重新啟動它,似乎 WASExecStop
也被調用了...但是太晚了...我在日誌中看到我的進程都收到了終止,正如我在日誌中看到的那樣:
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。
先謝,
答案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