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=noneSendSIKKILL=no甚至所有可能的超时时间都设置为 5 分钟TimeoutStopUSecTimeoutSec并且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

相关内容