问题 以用户身份存储守护程序的pid文件


是否有一个首选位置来存储以用户身份运行的守护程序的pid文件? / var / run是标准位置,但这是针对用户守护程序的,因此它没有写入权限。据推测,我的守护进程将从.profile或.bashrc或其他东西开始。只是把它保存到/ tmp一个坏主意?


11196
2017-10-18 07:28


起源

保存到/ tmp是没有用的,因为您发明的任何命名约定(例如 /tmp/<username>/<pid>.pid)可能已被其他应用程序使用,您将无法创建该文件。在下使用随机dirname /tmp 破坏了pid文件的想法 - 能够在不扫描进程列表的情况下快速获取pid。 - Antony Hatchkins


答案:


如果它是为用户运行的,那么让我们看看,存在哪种类型的用户特定存储。

嗯。

而已!主目录。我知道最终会来找我:-)


抱歉光刺。说真的,我会把PID藏进去 $HOME/.daemon.pid 要么 ~/.daemon.pid (当然,你如何命名文件)。

当然,这是假设您只为用户运行一个守护程序。如果没有,你需要有点棘手。


并希望减轻您对用户无意中删除其主目录中的未知文件的担忧,这就是为什么您通过启动它来使其“隐藏”的原因 . 字符。

大多数没有经验的用户都不应该 看到 这些和有经验的用户应该知道比用它们捣乱更好。


8
2017-10-18 07:38



那么用户看到了hom目录,我认为他们更有可能删除该文件,如果他们看到它〜不知道它是什么 - Falmarri
@Falmarri:那有什么危险?如果您确实需要再次使用PID,则可以随时查看流程表。 PID文件只是一个方便。 - Aaron Digulla
这就是你放一个的原因 . 在它面前。不知道他们正在做什么的用户可能永远不会知道它存在。如果他们经常看到隐藏的文件,只删除一个错误 .bashrc 会告诉他们他们的方式错误:-)如果你是 真 偏执狂,把PID放进去 ~/.dont_EVER_delete_me_or_you_WILL_be_sorry/.daemon.pid。 - paxdiablo
这有一个主要缺点:与/ var / run不同,用户home在重启后不会被清除。 - augurar
@augurar,我建议,如果用户维护他们自己的“临时”文件区域,他们有责任实际维护它:-) FHS说明用户 可能 被允许有子目录 /run(新的” /var/run)但必须仔细设置。我经常发现它更容易使用 ~ 子目录,因为权限应该 已经 好好地。无论如何,创建系统启动任务很容易 rm -rf /home/*/run/* 确保所有用户在启动时清除临时区域。 - paxdiablo


XDG Basedir规范 定义应存储这些内容的位置。
变量 $XDG_RUNTIME_DIR 定义它的位置,虽然它没有默认值。
最常见的后备(如果未设置变量)是 /tmp/service-$USER.id

这有助于保持整洁的homedirs,同时保留所有运行时数据


8
2018-05-26 09:44





我建议你去用户主目录中的子目录。

~/.programname/.pid

如果有任何其他用户配置数据,您也可以将其存储在此处,以避免使主目录混乱。


0
2017-10-18 08:02