Xiaoxia[PG]

写了个Python脚本监控nginx进程

Linux、我的代码17 条评论

接上一文用iptables让SSH服务对陌生人说不。还是有点担心这个学期内,nginx可能会因为系统各种原因而出现异常退出,导致Web服务暂停。所以,又来了一个方案。

#!/usr/bin/env python
import os, sys, time

while True:
    time.sleep(3)
    try:
        ret = os.popen('ps -C nginx -o pid,cmd').readlines()
        if len(ret) < 2:
            print "nginx process killed, restarting service in 3 seconds."
            time.sleep(3)
            os.system("service nginx restart")
    except:
        print "Error", sys.exc_info()[1]

设置文件可执行属性,加入到/etc/rc.local,总算放心了。
这种方法还可以监控别的进程,我相信应该有现成的监控软件,但是我觉得写个脚本更方便。

17 条评论

  1. 没使用vps,没这些烦恼

    1. 虚拟主机?

  2. 表示一台vps上快半年没重启了, Nginx 也是稳定运行着的.

    1. 我博客的vps,uptime也3个月了。apache2的。

      1. 原来OpenVZ进程执行久了也许会直接被Killed.

  3. 把第4~5行删除,可以使用cron会解决3秒一次的检查。

    1. 哈,有意思!cron如果发现进程还没退出,会结束那个进程然后重新运行么?

    2. cron的时间最小粒度为分钟。如果要3秒钟的话需要写20个cron任务。

      http://stackoverflow.com/questions/1034243/how-to-get-a-unix-script-to-run-every-15-seconds

  4. 比较简单的功能,就直接crontab+shell不错

    1. 的确可以用shell脚本写,只不过有时候用自己最拿手的脚本,写起来效率高点 🙂

  5. 应当將出错信息记录下来

    1. 这个重任交给你了!

      1. 对哦,怎么能记录出错信息呢?我的nginx也经常无缘无故就退出了

        1. nginx的日志文件不能找到出错信息吗?

  6. nginx没这么脆弱吧...自己不是有个监护进程么, 倒是apache容易倒, 动不动nginx就报500了

    1. apache的进程模式运行似乎挺稳定的。我的博客运行了好几个月,也不会遇到问题。

  7. 我的网站一年跑apache都没遇到问题的,额~~ 不过每周日晚上都要手动重启一下vps(强迫症患者),也不知道为啥养成了习惯,难道是跟网吧老板学的?哇哈哈

发表评论

评论会经过自动审核,链接请勿超过 3 个。