CentOS7 systemctl 在我的進程已終止後重新啟動時呼叫 ExecStop

CentOS7 systemctl 在我的進程已終止後重新啟動時呼叫 ExecStop

我有一個 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

相關內容