Python守护进程化

6
我想将一个Python进程守护化,现在想问一下是否有好的实践方式来运行一个守护进程,就像一个父进程调用另一个打开10-30个线程的类。
我计划编写一个服务器组的监控脚本,并希望每5分钟检查一次每台服务器,确保每台服务器都被准确地检查了5分钟。
我希望它是这样的(类似于ps auxf风格的输出):
|monitor-daemon.py
 \-check-server.py
 \-check-server.py

....

Thank you!

3个回答

8

是的,使用python-daemon而不是supervisord!python-daemon实现了PEP 3143的规范,即“标准守护进程库”:http://www.python.org/dev/peps/pep-3143/ - aculich
1
你仍然可以使用supervisor与python-daemon一起工作;-) - Stefano

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以每分钟一次的频率进行检查。日志可以重定向到文件等位置,因此您始终可以查看状态。


谢谢,但对我来说似乎有些过度(此时此刻)- 如果您有以下建议: (如果我重复了,请原谅)
  • 守护程序启动,检查一切是否正常
  • 调用(示例)MyMonitor() .check()
-- MyMonitor.check() 有任务
  • 从数据库(SQLite/MySQL)获取数据
  • 传递数据并为每个数据条目打开线程
  • 根据输出进行进一步操作(端口失败-发送电子邮件)
  • 关闭创建的线程
很抱歉用这种新手样式,但希望在使用其他模块之前检查是否一切就绪。
- abiko
我已经添加了一个abiko的例子,也许这会有所帮助。请参阅文档以获取示例事件侦听器:http://supervisord.org/events.html#example-event-listener-implementation - Wolph
是的,Supervisord 太过浪费且过于复杂。建议您使用备选答案中提到的 http://pypi.python.org/pypi/python-daemon 更好。 - aculich

-2

创建自己的daemonize函数实际上没有太多难度:《Unix环境高级编程》(第二版)的源代码是免费提供的: http://www.apuebook.com/src.tar.gz -- 你需要找到apue.2e/daemons/init.c文件。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接