Python守护进程没有pidfile

标签 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()

最佳答案

我同意@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提到这种将随机命名的文件硬链接(hard link)到您的 pidlock 文件的方法在使用 O_EXCL 之前是一种文件锁定方法。打开文件时使用的标志。

但烦人的是文件没有像你说的那样包含 PID,文件名有一个 PID,它与正确的 PID 相差几个数字,所以它非常糟糕误导。

关于Python守护进程没有pidfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909754/

相关文章:

python - 如何查询 App Engine NDB 中是否存在实体

Java守护进程部署

macos - launchctl 无法运行二进制文件并以代码 78 退出

Python 线程 : Multiple While True loops

php - 为 rabbitmq 运行 php 消费者脚本如何正确?

python - Django Admin 如何更改关系字段中的文本

python - 简单的 Json 问题数据类型

python - 实现与 `dict.get` 提供的默认功能等效的列表

linux - 如何记录 Linux 文件系统中的每日更改?

python - tkinter 调用两个函数