你好,我正在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()发布于 2014-05-14 14:57:46
我同意@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,您完全正确,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文件。这个答案提到了这种硬链接随机命名文件到pidlock文件的方法是在打开文件时使用O_EXCL标志之前的文件锁定方法。
但令人讨厌的是,文件没有像您所说的那样包含PID,而且文件名有一个PID,与正确PID的几个数字相距很远,所以它非常误导人。
https://stackoverflow.com/questions/17909754
复制相似问题