我有一个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来也行。 然后,在操作系统启动时,它也开始正确。 问题是在操作系统关机。 我正在重新启动它,似乎如果ExecStop WAS调用太…但是太迟了…我在日志中看到,我的进程都收到杀死,因为我可以在我的日志中看到:
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。
提前致谢,
尝试
[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