原由: 公司部署的web服務常常莫名其妙的掛掉。並且 還找不到具體的問題,使用supervisor守護的gunicorn,可是在屢次嘗試重啓失敗以後, 就不再啓動了。而後 只能想另外的辦法。寫個監控腳本,每隔一段時間查看一下進程是否存在,不存在則重啓服務。web
代碼以下:bash
#!/usr/bin/env bash ################# # # 進程監控腳本 # 2016-05-11 lpe234 # # 每五分鐘 執行一次檢查. # sudo crontab -e # */5 * * * * /bin/bash /path/to/monitor.sh >> /path/to/monitor.log 2>&1 # ################ process_name="process_name" process_count=10 # 理論進程數量 # 獲取church_app進程數量(默認爲10) process_number() { number=`ps -ef | grep ${process_name} | grep -v grep | wc -l` return ${number} } process_number p_num=$? now=`date '+%Y-%m-%d %H:%M:%S'` if [ ${p_num} -lt ${process_count} ] then # 拋出錯誤日誌 echo "[$now] [ERROR] '$process_name' process_number is $p_num, restart it." # TODO: 發送報警郵件..... # 重啓web服務相關代碼 # 調試信息 #else # echo "[$now] [DEBUG] '$process_name' process_number is $p_num, status ok." fi
額, 大概就是這個樣子。 app
crontab 有兩種配置方式。 一種是 修改 /etc/crontab 文件, 須要制定執行命令的帳戶。 第二種是 crontab -e 直接編輯, 此時不須要指定執行用戶, 默認爲當前編輯用戶。使用 crontab -l 便可查看當前用戶的全部定時任務(不包括 修改 /etc/crontab 文件 添加的定時任務)spa
這個, 折騰了大半天。好多都只是說了怎麼發送郵件。但沒有說具體怎麼配置。調試
修改 /etc/mail.rc 這個文件, 條件以下內容:rest
# mail config set from=xxx@qq.com set smtp=smtp.qq.com set smtp-auth-user=xxx set smtp-auth-password=xxx set smtp-auth=login
而後, 理論上就能夠愉快的發送郵件了。日誌
mail -s '123' lpe234@qq.com < x.sh
至於 添加附件之類的。 有時間再研究吧。code