systemd ExecStartPost 看起来不会被调用

jne*_*ney 6 systemd

我使用以下配置来启动beanstalkd进程

[Service]
ExecStart=/usr/local/bin/beanstalkd 
ExecStartPost=pgrep beanstalkd > /var/run/beanstalkd.pid
Run Code Online (Sandbox Code Playgroud)

最后一行应该在启动进程后生成一个 pidfile,但未创建该文件。为什么 ?

还是有另一种方法可以强制创建 pidfile systemd

小智 9

对于 Type=simple 服务,systemd 不需要 pidfile。它将在前台管理守护进程。systemctl status SERVICE_NAME将显示主进程(以及 cgroup 中的任何其他进程)的 pid。

为了完整起见,您的 ExecStartPost 行不起作用,因为 systemd 不使用 shell 来执行命令并且不执行 $PATH 查找,因此您必须使用ExecStartPost=/bin/sh -c "...",但正如我所说,该行是不必要的。

  • 谢谢它有效。我知道 `systemd` 不需要 pidfile,但我想用 `monit` 生成一个来监视进程 (2认同)