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

时间:2011-03-02 21:21:11

标签: linux ubuntu unix pid

我在两种情况下都要求:技术上和风格上。

我的应用程序/守护程序可以在/opt/my_app/run/中保留pid文件吗?

这样做非常糟糕吗?

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

4 个答案:

答案 0 :(得分:95)

我不会将pidfile放在应用程序安装目录下,例如/opt/my_app/whatever。这个目录可以以只读方式挂载,可以在机器之间共享,也可以由一个守护程序监视,该守护程序将那里的任何更改视为可能的闯入尝试...

pidfiles的正常位置是/var/run。大多数unices将在启动时清理此目录;在Ubuntu下,这是由/var/run内存文件系统(tmpfs)实现的。

如果从以root身份运行的脚本启动守护程序,请让它创建一个子目录/var/run/gmooredaemon,并在su用户启动守护程序之前将其chown给运行守护程序的用户。

在许多现代Linux系统上,如果从未以root身份运行的脚本或启动程序启动守护程序,则可以将pid文件放在/run/user/$UID中,这是每用户等效的传统{ {1}}。请注意,启动程序的根部分或以root身份运行的引导脚本需要创建目录(对于人类用户,该目录是在用户登录时创建的。)

否则,选择/var/run/tmp下的位置,但这会带来额外的复杂性,因为如果pidfile的名称位于可写入世界的目录中,则无法唯一确定该名称。

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

答案 1 :(得分:9)

/ opt用于安装“自包含”应用程序,所以这里没有错。将/opt/my_app/etc/用于配置文件,将/opt/my_app/log/用于日志等 - 这种应用程序的常见做法。

这样您就可以将应用程序作为TGZ文件分发,而不是为每个包管理器维护一个包(自标记ubuntu以来至少为DEB)。我建议将此用于内部应用程序或您可以很好地控制环境的情况。原因在于,如果安全成本高于您的安全成本(打包应用程序所需的工作不应超过编写应用程序所需的工作量),这是没有意义的。

答案 2 :(得分:8)

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

答案 3 :(得分:6)

另一个约定,如果你没有以root身份运行脚本,那就是将pid文件放在~/.my_app/my_app.pid中。这种方式更简单,同时仍然是安全的,因为主目录不是世界可写的。