Python守护进程没有pidfi

2024-06-01 05:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我正在用python编写一个守护进程,它使用python守护进程模块,我的应用程序正确启动,创建了一个pidfile.lock,但是没有包含进程id的pidfile的迹象

import daemon
import lockfile

import perfagentmain

context = daemon.DaemonContext(
    working_directory='/opt/lib/perf-agent',
    umask=0o002,
    pidfile=lockfile.FileLock('/var/run/perf-agent.pid')
    )


with context:
    perfagentmain.start()

Tags: 模块importidlock应用程序进程contextdaemon
1条回答
网友
1楼 · 发布于 2024-06-01 05:25:41

我同意@npoektop对解决方案的评论。我只想说daemon.pidlockfile在我写这篇文章的时候并不存在。daemon.pidfile取而代之。可能是最近改了名字?

因此,这里是使用daemon.pidfile模块而不是lockfile模块的一般解决方案。

import daemon
import daemon.pidfile
import perfagentmain

context = daemon.DaemonContext(
    working_directory='/opt/lib/perf-agent',
    umask=0o002,
    pidfile=daemon.pidfile.PIDLockFile('/var/run/perf-agent.pid')
    )

with context:
    perfagentmain.start()

而且@Martino Dino,您绝对是对的,似乎lockfile模块在编写锁文件方面有完全不同的实现。(即使python-daemon实际上需要lockfile

当我根据自己的需要尝试pidfile = lockfile.FileLock('/var/run/mydaemon.pid')时,我看到了一个名为<MY_MACHINE_NAME>-<8CHAR_HEX_ID>.<PID_OFF_BY_2>的文件,以及一个名为/var/run/mydaemon.pid.lock的文件。This answer提到了在使用打开文件时使用的O_EXCL标志之前,将随机命名的文件硬链接到pidlock文件的方法是一种文件锁定方法。

但令人恼火的是,文件没有像您所说的那样包含PID,而且文件名有一个PID,该PID被正确的PID的几个数字关闭,因此它具有严重的误导性。

相关问题 更多 >