我有一個啓動兩個子進程(和其中一個子進程啓動〜10個其他子進程)的守護進程。當我systemctl stop
我的過程中,子進程似乎'積極'被systemctl
殺死 - 這不會給我的進程一個清理機會。systemd`systemctl stop`積極殺死子進程
我該如何讓systemctl stop
退出攻擊性攻擊,從而讓我的進程協調有序清理?我試過timeoutSec=30
沒有用。
我有一個啓動兩個子進程(和其中一個子進程啓動〜10個其他子進程)的守護進程。當我systemctl stop
我的過程中,子進程似乎'積極'被systemctl
殺死 - 這不會給我的進程一個清理機會。systemd`systemctl stop`積極殺死子進程
我該如何讓systemctl stop
退出攻擊性攻擊,從而讓我的進程協調有序清理?我試過timeoutSec=30
沒有用。
KillMode=
[1]默認爲control-group
。這意味着你的服務的每一個進程都被SIGTERM殺死。
你有兩個選擇:在每個流程和關機的
TimeoutStopSec
(默認爲90秒[2])KillMode=mixed
。 SIGTERM只會發送到主進程。然後在TimeoutStopSec
內再次關機。如果您沒有在TimeoutStopSec
內關閉,systemd會將SIGKILL
發送給您的所有進程。注:我建議在選項2,而不是KillMode=process
使用KillMode=mixed
,因爲後者將發送最後SIGKILL
只是你的主要過程,這意味着你的子過程,如果他們已經鎖定了就不會被殺死。
[1] https://www.freedesktop.org/software/systemd/man/systemd.kill.html#KillMode=
[2] https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#DefaultTimeoutStartSec=
你有沒有審查'男人systemd.services'和'男人systemd.kill'的文檔? –