在启动服务之前删除 pid 文件的最佳方法是什么?

在启动服务之前删除 pid 文件的最佳方法是什么?

我有一个服务在关闭时并不总是删除其 pid 文件。所以当它再次启动时就会失败。我的系统是 RHEL 7.2 系统,我想要做的是让系统在启动之前查找该文件,如果找到则将其删除。我需要使用 systemctl 完成所有这些操作,或者需要在有人运行之前进行systemctl start <service>。我有我想要使用的命令,我只是不确定如何将其与 systemctl 集成以实现无缝过程。这是命令:

[ -f /var/run/dir/file.pid ] && echo "Found and removing" && rm -f /var/run/dir/file.pid || echo "Not Found"

是否可以将其粘贴到位于 /usr/lib/systemd/system/ 的服务文件中?如果是这样,我会把它放在哪里?这是需要进入的文件的内容。我们将其称为 dns.service。

[Unit]
Description=DNS daemon
BindTo=dns.service
After=syslog.target network.target dns.service
ConditionPathExists=/etc/dns/dns.conf

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/dns
ExecStart=/usr/sbin/dns -u dns -g dns -f   /etc/dns/dns.conf -d -P 17500
Restart=on-abort

[Install]
WantedBy=network.target

这看起来是完成此任务的正确方法还是有更好的方法?

答案1

定制服务应该留在/etc/systemd/system.

既然你正在做forking,我要做的就是使用该PIDFile=指令。当服务停止时,它将删除该文件。然而,在启动时,它会不是写入文件。由您的服务来写入它。推荐的写入位置是/run

相关内容