【发布时间】:2014-07-31 22:17:09
【问题描述】:
我有一个简单的守护程序脚本:
#!/usr/bin/python
from myClass import theClass
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 'run'
classObj = theClass()
classObj.run()
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
我可以在终端中使用:python ./myDaemon.py start
无论什么原因,它都会时不时地拉出来。因此,在 myClass 中,每次成功运行时我都会编写一个文件。另一个脚本从 cron 运行,例如; 1 * * * * python checkFile.py我看看脚本最后一次成功运行是否是> 300秒前。如果它大于我尝试重新启动我的守护进程。这就是我遇到麻烦的地方。
当我在终端窗口中使用:python ./myDaemon.py start 启动守护程序时,我可以关闭窗口并继续我的业务,守护程序将继续运行。但是,(这是我不太了解的地方)如果我尝试使用os.system('python ./myDaemon.py start > /dev/null') 或使用子进程从我的checkFile.py 脚本中启动myDaemon.py:
proc = subprocess.Popen(['python','myDaemon.py','start'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = proc.communicate()
我没有成功。我从终端窗口手动运行checkFile.py 并看到了 myClass 输出(即使我假设上述系统和子进程命令应该已经抑制了它)。所以,守护进程启动,但如果我关闭该窗口,守护进程就会停止。
我做错了吗?
【问题讨论】:
标签: python cron subprocess daemon