【发布时间】:2012-11-21 13:50:00
【问题描述】:
我一直在使用Proc::Daemon 来尝试制作启动/停止守护程序脚本,我可以这样做:
X start
X stop
X status
等等。但是,在源代码中,Proc::Daemon 使用“pid”文件或搜索进程表。我关心这两种方法,首先是“pid”被重用,这可能会给人一种服务在实际关闭时启动的印象,其次是进程表条目很容易伪造,并且检查看起来并不特别健壮。
有没有像我描述的那样制作启动/停止守护程序脚本/程序的可靠方法,或者有人已经制作了?请注意,我没有 root 访问权限,如果这很重要,我也在 Solaris 上。
【问题讨论】:
-
如果您既不需要 PID 文件也不需要搜索进程表,那么您就有了鸡/蛋问题。为了检查某些东西是否正在运行,您需要知道它的 PID。这必须存储在已启动的守护程序和查询程序都可以访问信息的位置。不管你这样做,该信息可以被其他进程删除(简单的
rm,从数据库中删除条目,无论如何)。使用 cgroups 等 Linux 特定功能可以实现更多控制(查看 systemd 的作用)。 -
@MoritzBunkus:为了争论,假设其他进程不会删除 pid 文件等。如果他们这样做,我会遇到更大的问题。