首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python守护进程没有pidfile

Python守护进程没有pidfile
EN

Stack Overflow用户
提问于 2013-07-28 15:23:20
回答 1查看 8.7K关注 0票数 6

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

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2014-05-14 14:57:46

我同意@npoektop对解决方案的评论。我只想说,在我写这篇文章的时候,daemon.pidlockfile并不存在。相反,daemon.pidfile。也许这是最近的名字更改?

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

代码语言:javascript
复制
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的几个数字相距很远,所以它非常误导人。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17909754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档