Python守护进程没有pidfile

Mar*_*ino 4 python daemon

您好我正在python中编写一个使用python-daemon模块的守护进程,我的应用程序正确启动,创建了一个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()
Run Code Online (Sandbox Code Playgroud)

Hey*_*his 7

我同意@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()
Run Code Online (Sandbox Code Playgroud)

而@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. 这个答案提到了在使用O_EXCL打开文件时使用的标志之前,这种将随机命名的文件硬链接到pidlock文件的方法是一种文件锁定方法.

但令人讨厌的部分是文件没有像你说的那样包含PID,并且文件名的PID被一些正确的PID关闭,所以它非常误导.