Python (2.7) 脚本监控与通知系统

1 投票
2 回答
1889 浏览
提问于 2025-04-18 02:43

我看过很多关于监控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

另外,记得查看一下文档,里面有很好的示例,教你如何设置警报和发送邮件。

撰写回答