2010-08-01 173 views
6

我想守护一个python进程,现在想问一下是否有一个守护进程运行的好习惯,就像父进程一样,并调用另一个可以打开10-30个线程的类。Python守护进程

我打算为一组服务器编写一个监视脚本,并希望每隔5分钟检查一次每台服务器,确认每台服务器正好5分钟检查一次。

我想有这种方式(在某种程度上讲,PS auxf风格输出):

|monitor-daemon.py 
\-check-server.py 
\-check-server.py 

....

谢谢!

回答

1

您可以使用supervisord这一点。您可以配置任务以响应事件。这些事件可以手动创建,也可以通过监视进程自动创建,也可以定期进行。

它是完全可定制的,并用Python编写。

例子:

[program:your_daemon_name] 
command=your_daemon_process 
# Add extra options here according to the manual... 

[eventlistener:your_monitor_name] 
command=your_monitor_process 
events=PROCESS_STATE_RUNNING # Will be triggered after a program changes from starting to running 
# Add extra options here according to the manual... 

或者,如果你想要的事件监听响应过程输出使用事件PROCESS_COMMUNICATION_STDOUTTICK_60为每分钟检查。日志可以重定向到文件等,所以你可以随时查看状态。

+0

谢谢,但这看起来像是一个矫枉过正的(此时) - 如果你有以下任何建议: (对不起,如果重复自己) - 守护进程已启动,检查是否一切正常 - 调用(示例)MyMonitor()。check() - MyMonitor.check()有任务 - 从数据库获取数据(SQLite/MySQL) - 传递数据并为每个数据条目打开线程 - 基于输出进一步的行动在那里(失败的端口 - 发送电子邮件) - 关闭创建主题 对不起,这样n00bish风格,但要检查是否一切就位,在使用额外的模块之前。 – abiko 2010-08-01 22:13:03

+0

我已经添加了一个例子abiko,也许这将有所帮助。请参阅文档以获取示例事件侦听器:http://supervisord.org/events.html#example-event-listener-implementation – Wolph 2010-08-02 15:00:00

+0

是的,supervisord太过复杂且过于复杂。按照备用答案中的建议,最好使用http://pypi.python.org/pypi/python-daemon。 – aculich 2011-12-04 11:12:51

8
+0

是的,使用python-daemon而不是supervisord! python-daemon实现了PEP 3143“标准守护进程库”的行为良好的守护进程规范:http://www.python.org/dev/peps/pep-3143/ – aculich 2011-12-04 11:13:31

+0

你仍然可以使用监督器和python守护进程;-) – Stefano 2012-08-31 08:20:20

-1

确实没有太多的创建自己的daemonize功能:Unix环境下的高级编程源码(第二版)免费提供:http://www.apuebook.com/src.tar.gz - 您正在寻找apue.2e/daemons/init.c文件。

有一个small helper program可以完成所有创建正确的守护进程的工作,它可以用来包装任意程序;这可能会节省一些麻烦。