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


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


前天服务器突然不能访问了,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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值