python脚本检测linux进程是否运行

铁血战士 发布于 2011/10/25 09:22
阅读 13K+
收藏 7

前天服务器突然不能访问了,ssh是能连上去,不过网站打不开了

在服务器上查了下进程,发现nginx没有启动,也不知道其中的原因。

这让我想起来当初现在使用的这个vps也有过不能访问的情况,也是由于nginx终止了运行

就想写一个脚本进去放到crontab里去定时监控

说到在linux里要监控一个进程是否运行也有很多的方法,可以使用ps看进程里是否有相关进程

不过在linux里每个进程都有一个pid文件对它对应,在程序运行时该文件就会存在,查看它的内容为程序当前运行的进程号,所以只要判断该文件是否存在就行了 我写的检测脚本如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
pf ="/usr/local/nginx/logs/nginx.pid"
if not(os.path.exists(pf)):
os.system("/etc/init.d/nginx start")

再说说crontab的设置,用户可以手动修改crontab来添加定时任务
另外系统里有默认的定时任务,你会在/etc目录下发现有
cron.daily cron.hourly cron.monthly cron.weekly 四个目录,看名字就知道它们分别是按天、小时、月、星期来执行目录下的脚本
把上面的代码保存成nginx.py放到cron.hourly目录下,记得加执行权限

chmod +x nginx.py
每小时执行一次
记得第一代码一定要加,否则将不能执行成功

昨天发现当nginx意外停止时pid文件是存在的,所以上面的代码就有问题了,在nginx意外停止后是不会自动重启的
不过也好修改,下面写出修改后的方案
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
pf ="/usr/local/nginx/logs/nginx.lock" #不再读取pid
os.system("ps -A|grep nginx>%s"% pf) #将进程信息写入lock文件
if not(os.path.getsize(pf)): #判断文件大小,当nginx没有运行时上一步写入lock的内容为空
os.system("/etc/init.d/nginx start")
#这里可以加入发短信的代码

有关短信发送的可参考 google的免费午餐–日历短信通知来监控服务器
还有也修改了定时任务,一小时检测一次总感觉时间太长了,就缩小到五分钟执行一次
这个要在crontab里手动编辑

crontab -e
0-59/5 * * * * /data/crontab/nginx.py #注意空格
重启crontab服务

/etc/init.d/crond restart

原文出处:http://www.91python.com/archives/317

加载中
0
Cecil_Nasa
Cecil_Nasa
你这最终用的还是SHELL本身的命令,何必外面再要去用Python呢
wangxi得
wangxi得
python 简单易用多了
0
狼0魂

这个思路还是很巧妙

返回顶部
顶部