Systemd插件无法创建PID文件


11

我在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

但是,我在/ var / run /中看不到PID文件。根据我的观点:

[Serivce]
PIDFile=/var/run/machined.pid

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

Answers:


18

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

文档中

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


感谢您的澄清。在我的情况下,playframework在项目根文件夹中创建了pid文件,但是停止或终止该进程/服务并没有删除“ pid”文件。因此,由于“ pid”文件,我无法重新启动项目服务。将此“ PIDFile = / path / to / pid”行添加到我的systemd服务文件中可以正常工作。如果服务停止或终止,它会删除pid文件
Ikrom

10

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

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.