我的pidfile必须位于/ var / run?

我在两个方面都问:技术上和风格上。

我的应用程序/守护进程可以在/opt/my_app/run/保留/opt/my_app/run/吗?

这样做很糟糕吗?

我的需求是这样的:我的守护进程运行在一个特定的用户下,实现者必须在/var/run ,chown和chgrp中创build一个新的目录,以使我的守护进程运行。 似乎更容易保持pidfile本地(守护进程)。

我不会把pidfile放在应用程序安装目录下,例如/opt/my_app/whatever 。 这个目录可以以只读方式挂载,可以在机器之间共享,守护进程可以监视这个目录,将守护进程视为可能的入侵尝试。

pidfiles的正常位置是/var/run 。 大多数unice会在启动时清除这个目录。 在Ubuntu下,这是通过/var/run内存中的文件系统(tmpfs)来实现的。

如果你从一个以root身份运行的脚本启动守护进程,创build一个子目录/var/run/gmooredaemon并把它放到守护进程运行的用户,然后启动守护进程。 否则,请在/tmp/var/tmp下select一个位置,但这会增加复杂性,因为如果pidfile的名称位于全局可写目录中,则无法唯一确定它的名称。

在任何情况下,让分销商或pipe理员轻松地(命令行选项,加上可能的编译时间选项)来更改pid文件的位置。

/ opt用于安装“自包含”应用程序,所以这里没有错。 使用/opt/my_app/etc/作为configuration文件, /opt/my_app/log/ for logs等等 – 这种应用程序的常见做法。

你可以把你的应用程序作为TGZ文件分发,而不是为每个软件包pipe理器维护一个软件包(至less在你标记ubuntu DEB)。 我会推荐这个在内部应用程序或您有很好的控制环境的情况下。 理由是,如果安全成本高于内部安装成本(打包应用程序所需的工作量不应超过编写应用程序所需的工作量),则这是没有意义的。

pid文件的位置应该是可configuration的。 / var / run是pid文件的标准,与/ var / log相同是日志的标准。 但是你的守护进程应该允许你在一些configuration文件中覆盖这个设置。

另一个约定,如果你不是以root身份运行这个脚本的话,那就是把pidfile放在~/.my_app/my_app.pid 。 这种方式更简单,但仍然安全,因为主目录不是全球可写的。