【问题标题】:Storing pid file for a daemon run as user为以用户身份运行的守护进程存储 pid 文件
【发布时间】:2023-03-23 01:10:02
【问题描述】:

对于作为用户运行的守护进程,是否有存储 pid 文件的首选位置? /var/run 是标准位置,但这是针对用户守护程序的,因此它在那里没有写权限。大概我的守护进程将从 .profile 或 .bashrc 或其他东西启动。将其保存到 /tmp 是个坏主意吗?

【问题讨论】:

  • 保存到 /tmp 并不好,因为您发明的任何命名约定(例如/tmp/<username>/<pid>.pid)可能已经被另一个应用程序使用,您将无法创建该文件。在/tmp 下使用随机目录名破坏了 pid 文件的想法 - 无需扫描进程列表即可快速获取 pid。

标签: linux daemon pid


【解决方案1】:

如果它是为用户运行的,让我们看看存在什么样的存储是用户特定的。

嗯。

就是这样!主目录。我知道它最终会来找我:-)


对不起,轻刺拳。说真的,我只是将 PID 存储到 $HOME/.daemon.pid~/.daemon.pid 中(当然,如何命名文件取决于你)。

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


希望消除您对用户会无意中删除其主目录中的未知文件的担忧,这就是为什么您通过以 . 字符开头将其“隐藏”的原因。

大多数没有经验的用户甚至都不应该看到这些,而有经验的用户应该知道最好不要和他们胡闹。

【讨论】:

  • 好吧,用户看到了 hom 目录,我认为如果他们看到文件,他们更有可能删除文件〜不知道它是什么
  • @Falmarri:那有什么危险?如果您真的再次需要 PID,您可以随时查看进程表。 PID 文件只是为了方便。
  • 这就是为什么你在它前面放一个.。不知道自己在做什么的用户可能永远都不知道它的存在。如果他们确实经常看到隐藏文件,那么删除.bashrc 的一个错误就会让他们知道他们的方式的错误:-) 如果你真的偏执,请将PID 输入~/.dont_EVER_delete_me_or_you_WILL_be_sorry/.daemon.pid
  • 这有一个主要缺点:与 /var/run 不同,用户主目录在重新启动后不会被清除。
  • 这里有一个更广泛的答案:superuser.com/a/1127720/71795 一个看起来非常优雅的错误答案在这里:stackoverflow.com/a/5174433。摘要:使用/tmp~
【解决方案2】:

XDG Basedir specification 定义了您应该存储这些内容的位置。
变量$XDG_RUNTIME_DIR 定义了它的位置,尽管它没有默认值。
最常见的回退(如果未设置变量)是/tmp/service-$USER.id

这有助于保持主目录整洁,同时将所有运行时数据保存在

【讨论】:

    【解决方案3】:

    我建议你在用户的主目录中找到一个子目录。

    ~/.programname/.pid
    

    如果还有其他用户配置数据,你也可以在这里存储,以免弄乱主目录。

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2013-06-17
      • 1970-01-01
      • 2011-08-12
      • 2016-10-01
      • 2023-03-02
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多