我的问题与 this question 有关,但有问题的进程是从 cron 运行的,并且由非 root 用户运行。因此,许多用户并没有真正的主目录(或者他们的主目录指向 /usr/share/package_name
,这不是 PID 文件的理想位置)。
存储在 /var/run
中是有问题的,因为这个目录除了 root 之外是不可写的。
我可以使用 /tmp
,但我想知道出于安全原因这是否是理想选择。
我可以安排一个启动脚本在 /var/run
中创建一个目录,该目录由适当的用户拥有(我不能在包安装时这样做,因为 /var
通常作为 tmpfs 安装,因此不是持久的)。
此处的最佳做法是什么?
最佳答案
好问题 :),我现在也有同样的问题。我不确定这是否是正确的答案,但我希望它能有所帮助,我也希望收到反馈。
我四处搜索,发现将每个用户守护程序注册为 dbus 服务是一个很好的解决方案。 dbus 可以确保服务只运行一次。不需要 pid 文件。
另一种解决方案(我当前的)是在如下目录中创建 PID 文件:
$HOME/.yourdaemon/pid
在你发表评论后我意识到,你不能给家里写信。我建议查看 dbus
更新
我有一个想法。如果您正在使用/tmp,但正在寻找一个名为 yourdaemon.pid.UNIQUE_KEY 且由守护进程的用户拥有的 pid 文件怎么办?这应该可以正常工作。
UNIQUE_KEY
应该是随机生成的(最好使用 tempnam,因为它是竞争条件证明)。
关于linux - 以非 root 用户身份运行的系统守护进程的 PID 文件的首选位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905997/