我有一个使用DaemonRunner创建带有pid文件的守护进程的脚本。问题是,如果有人尝试在不停止当前正在运行的进程的情况下启动它,它将无提示地失败。检测现有过程并提醒用户先停止它的最佳方法是什么?它像检查pidfile一样容易吗?

我的代码类似于以下示例:

#!/usr/bin/python
import time
from daemon import runner

class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path =  '/tmp/foo.pid'
        self.pidfile_timeout = 5
    def run(self):
        while True:
            print("Howdy!  Gig'em!  Whoop!")
            time.sleep(10)

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()


要查看我的实际代码,请查看以下内容中的investor.py:
https://github.com/jgillick/LendingClubAutoInvestor

最佳答案

由于DaemonRunner处理自己的锁文件,因此明智地引用该锁文件,以确保您不会搞砸。也许此功能块可以帮助您:


    from lockfile import LockTimeout
到脚本的开头,并像这样包围daemon_runner.doaction()

try:
    daemon_runner.do_action()
except LockTimeout:
    print "Error: couldn't aquire lock"
    #you can exit here or try something else

关于python - DaemonRunner:检测守护程序是否已在运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16247002/

10-15 16:35