Python (2.7) 脚本监控与通知系统
我看过很多关于监控Python脚本的帖子,但没找到我想要的那种解决方案。简单来说,我有两台运行Linux的桌面电脑。每台电脑上都有多个Python脚本不停地运行,24小时不间断。其中大部分是用来抓取网页的,还有一些是用来清理和处理数据的。我在这些脚本中加入了比较完善的异常处理,如果出现错误或崩溃,会给我发邮件,但有些情况我还是收不到邮件,比如脚本卡住了、电脑崩溃了,或者电脑失去网络连接等等。
所以,我想建立一个类似的“签到”服务,让Python脚本在运行过程中多次向这个服务发送状态。如果在设定的时间内没有签到,就给我发邮件。我不太确定这是否可以通过信号模块、asyncore模块和/或套接字来实现,或者我该从哪里开始比较好。
有没有人有过类似的经验?或者能给我一些建议?
2 个回答
0
Upstart 是一个不错的选择,但我担心它只适用于 Ubuntu 和基于 Redhat 的系统。
2
可以看看一些监控工具,比如monit或者supervisord。这些工具就是为了实现你所描述的功能而设计的。
举个例子:你可以为你的Python程序创建一个简单的init.d
脚本:
PID_FILE=/var/run/myscript.pid
LOG_FILE=/mnt/logs/myscript.log
SOURCE=/usr/local/src/myscript
case $1 in
start)
exec /usr/bin/python $SOURCE/main_tread.py >> LOG_FILE 2>&1 &
echo $! > $PID_FILE
;;
stop)
kill `cat ${PID_FILE}`
;;
*)
echo "Usage: wrapper {start|stop}"
;;
esac
exit 0
然后把这个内容添加到monit
的配置文件里:
check process myscript pidfile /var/run/myscript.pid
start program = "/etc/init.d/myscript start"
stop program = "/etc/init.d/myscript stop"
check file myscript.pid path /var/run/myscript.pid
if changed checksum then alert
另外,记得查看一下文档,里面有很好的示例,教你如何设置警报和发送邮件。