Cron重新启动Python守护进程
我有一个简单的守护程序脚本:Cron重新启动Python守护进程,python,cron,subprocess,daemon,Python,Cron,Subprocess,Daemon,我有一个简单的守护程序脚本: #!/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' se
#!/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的输出(尽管我认为前面提到的系统和子流程命令应该已经抑制了该输出)。因此,守护进程启动,但如果我关闭该窗口,守护进程将停止
我做错了吗 更好地使用守护进程管理器
这个概念可以简单得多:
- 所有(程序)脚本都在前台运行(禁止后台监控)
- 守护进程化由某些守护进程管理器控制
- -非常适合运行简单脚本
- -非常适合同时运行多个脚本
- 所有(程序)脚本都在前台运行(禁止后台监控)
- 守护进程化由某些守护进程管理器控制
- -非常适合运行简单脚本
- -非常适合同时运行多个脚本