Systemd 插件无法创建 PID 文件

Chr*_*ski 13 files pid systemd

我在 path 有一个 systemd-machined 插件/etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf。当我跑步时,systemctl status systemd-machined我确实看到了线条

Drop-In: /etc/systemd/system/systemd-machined.service.d
       ??10-machined-pid-file.conf
Run Code Online (Sandbox Code Playgroud)

但是,我在 /var/run/ 中没有看到 PID 文件。基于我的访问:

[Serivce]
PIDFile=/var/run/machined.pid
Run Code Online (Sandbox Code Playgroud)

我相信创建该 PID 文件应该没有任何问题。有什么我想念的吗?

Mic*_*ton 24

PIDFile=设置不会创建PID 文件。这仍然取决于服务本身,就像过去 40 年一样。相反,这个选项告诉 systemd 在哪里可以找到现有的 PID 文件(如果有的话)。在大多数情况下,根本不需要它,因为 systemd 会将服务保存在自己的 cgroup 中,并且不需要 PID 文件来跟踪它们。但是,如果服务自行清理失败,systemd 会在服务退出时删除一个 PID 文件。

文档

采用指向此守护程序的 PID 文件的绝对文件名。对于Type=设置为 的服务,建议使用此选项forking。systemd 会在服务启动后读取守护进程主进程的PID。systemd 不会写入此处配置的文件,但如果该文件仍然存在,它会在服务关闭后删除该文件。


小智 14

遗憾的是,即使您PIDFile=在服务的单元文件中指定了一行,systemd 也不会为非分叉服务创建 PID文件。但是你可以用ExecStartPost=一行来作弊,例如:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
Run Code Online (Sandbox Code Playgroud)