我有一个类型为 的 systemd Ubuntu 服务simple
,将其称为foo.service
,并带有正在执行的 Python 脚本,格式为ExecStart
.
然后另一个类型为 的服务oneshot
将其称为foo-restart.service
正在执行的服务/usr/bin/systemctl restart foo.service
。
最后,PathChanged
单独文件中的指令foo-restart.path
指向我的 Python 脚本。
这个想法是,当我更新文件时,服务将重新启动 - 这正在发生,但需要一段时间,并且journalctl -fu foo.service
显示:
Oct 08 22:45:14 Vpn445 systemd[1]: Stopping Foo...
Oct 08 22:45:58 Vpn445 python3[2686278]: Yay
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: State 'stop-sigterm' timed out. Killing.
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: Killing process 2686278 (python3) with signal SIGKILL.
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: Killing process 2686305 (python3) with signal SIGKILL.
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: Killing process 2689506 (python3) with signal SIGKILL.
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: Main process exited, code=killed, status=9/KILL
Oct 08 22:46:44 Vpn445 systemd[1]: foo.service: Failed with result 'timeout'.
Oct 08 22:46:44 Vpn445 systemd[1]: Stopped Foo.
Oct 08 22:46:44 Vpn445 systemd[1]: Started Foo.
我怎样才能使这个过程更快,我应该触发什么命令来确保服务更快地停止和重新启动,最后,重新加载是否足够。
我也将 foo 的类型更改为oneshot
,运行systemctl daemon-reload
并重新启动服务,但没有运气。
我可以看到问题所在,因为我每 10 秒登录一条消息。停止进程启动,但脚本仍然运行,直到被强制停止:
Oct 08 23:38:28 Vpn445 systemd[1]: Stopping Foo...
Oct 08 23:38:33 React python3[2692568]: After change
Oct 08 23:38:43 React python3[2692568]: After change