Linux如何實現進程監控和守護

最近新搭建的亞馬遜EC2服務器, 上面部署了一個靜態的WEB, 啓動了一個nginx作代理。最近發現一個問題:linux

Nginx進程隔一段時間就莫名的掛掉了, 而後就出現了網站沒法打開的窘境。。nginx

爲了防止這個問題再次發生, 特使用以下方法進行Nginx的進程守護。服務器

1. 編寫腳本, 監測nginx進程,若是掛掉,則重啓,不然不予干預。測試

在/data/work/scripts目錄下建立一個 restart_nginx.sh文件, 內容以下:網站

#查找nginx進程,排除掉grep命令產生的進程號,awk打印第2列值(即進程號)賦給pid變量
pid=`ps aux | grep nginx | grep -v grep | awk '{print $2}'`
#記錄當前時間 dat
=`date '+%Y-%m-%d %H:%M:%S'` #輸出當前時間 echo $dat
#輸出進程號
echo $pid #當串的長度大於0時爲真(進程號不爲空) if [ -n "$pid" ] then {
# 說明進程還活着,不用處理
echo ===========alive!================ } else
#不然進程掛了,須要重啓 echo ===========shutdown!start============== /opt/tengine/sbin/nginx
sleep 2;
fi

2. 給予restart_nginx.sh文件可執行權限spa

chmod u+x restart_nginx.sh

3. 編輯linux定時器, 增長定時任務, 每隔2分鐘執行restart_nginx.sh腳本3d

crontab -e

粘貼以下內容:代理

*/2 * * * * /data/work/scripts/restart_nginx.sh >> /data/work/scripts/restart_nginx.log

4. 重啓定時器rest

/etc/init.d/crond restart

5. 先查看下當前nginx進程的狀態日誌

發現有四個和nginx相關的進程。

6. 在看看定時日誌:

說明此時進程是正常的。

6. 爲了測試nginx掛了可否自動重啓, 咱們手動殺死nginx

ps -ef | grep 'nginx' | grep -v grep| awk '{print $2}' | xargs kill -9

 此時nginx已經被殺死, 咱們等待兩分鐘, 看進程在定時器下可否自動恢復。

 

此時看到,當前進程已經啓動起來了!

相關文章
相關標籤/搜索