原文:http://www.91python.com/archives/317
前天伺服器突然不能訪問了,ssh是能連上去,不過網站打不開了
在伺服器上查了下進程,發現nginx沒有啟動,也不知道其中的原因。
這讓我想起來當初現在使用的這個vps也有過不能訪問的情況,也是由於nginx終止了運行
就想寫一個指令碼進去放到crontab裡去定時監控
說到在linux裡要監控一個進程是否運行也有很多的方法,可以使用ps看進程裡是否有相關進程
不過在linux裡每個進程都有一個pid檔案對它對應,在程式運行時該檔案就會存在,查看它的內容為程式當前啟動並執行進程號
所以只要判斷該檔案是否存在就行了 我寫的檢測指令碼如下
#!/usr/bin/env python# -*- coding: utf-8 -*-import ospf ="/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 ospf ="/usr/local/nginx/logs/nginx.lock" #不再讀取pidos.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 -e0-59/5 * * * * /data/crontab/nginx.py #注意空格
重啟crontab服務
/etc/init.d/crond restart