2

我有一个使用 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

4

2 回答 2

1

由于 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
于 2014-03-10T14:25:59.183 回答
0

这是我决定使用的解决方案:

lockfile = runner.make_pidlockfile('/tmp/myapp.pid', 1)
if lockfile.is_locked():
    print 'It looks like a daemon is already running!'
    exit()

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

这是最佳做法还是有更好的方法?

于 2013-04-27T01:13:52.420 回答