我想创建一个永远运行的程序,一次只运行一个实例,可以用init.d脚本启动。python-daemon似乎是一个很好的选择,因为它是PEP 3143的参考实现。
无论如何,我无法理解PID锁文件的用途,因为它不阻止程序运行两次。
我是否应该手动检查我的init .d脚本中的锁文件是否存在(基于/ETC/init?d/骷髅)?我该怎么杀了它?获取pid文件中的pid编号并发送sigterm?
谢谢。

最佳答案

对我来说,它有效地防止了通过pid文件启动第二个实例。你用对了吗?我的例子是基于我在the PEP 3143 reference和资料中发现的:

#!/usr/bin/env python

import daemon, os, time, lockfile

with daemon.DaemonContext(
    pidfile=lockfile.FileLock('./pydaemon.pid'),
    working_directory=os.getcwd()):
  for i in range(10):
    with open('./daemon.log', 'a') as logFile:
      logFile.write('%s %s\n' % (os.getpid(), i))
    time.sleep(1)

如果我启动一次,它就会创建pid锁文件。如果我第二次启动它,第二个实例将一直休眠到第一个实例完成;正常的守护进程不会完成,因此这将有效地永远阻止第二个实例。但是,如果第一个守护进程终止,则启动第二个守护进程。

关于python - python守护程序的单个实例(带有python-daemon),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21990439/

10-16 02:07