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