python指令碼檢測linux進程是否運行__linux

來源:互聯網
上載者:User


原文: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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.