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

gmo*_*ore 70 unix linux ubuntu pid

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

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

这样做真的很糟糕吗?

我的需要是这样的:我的守护进程在特定用户下运行,并且实现者必须mkdir一个新的目录/var/run,chown和chgrp它以使我的守护进程运行.似乎更容易将pidfile保持为本地(对守护进程).

Gil*_*il' 97

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

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

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

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

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

在任何情况下,让分发者或管理员更改pidfile位置变得简单(命令行选项,加上可能的编译时选项).


Pau*_*ine 9

/ opt用于安装'自包含'应用程序,所以这里没有错.使用/opt/my_app/etc/的配置文件,/opt/my_app/log/用于记录等-共同实践这种应用.

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


Cos*_*atu 8

pid文件的位置应该是可配置的./ var/run是pid文件的标准,与/ var/log相同是日志的标准.但是您的守护程序应该允许您在某个配置文件中覆盖此设置.


pes*_*lla 6

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

  • 如果每个用户都可以运行您的应用程序实例而不会发生冲突,那就太好了。否则我会坚持 /var/run (2认同)