最近新搭建的亞馬遜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已經被殺死, 咱們等待兩分鐘, 看進程在定時器下可否自動恢復。
此時看到,當前進程已經啓動起來了!