最近做了一個進程調度框架,爲了確保進程正常運行,進行了輪訓檢測;在進程不存在的時候,自動重啓,如果存在,判斷是否僵死,如果僵死,就kill掉,再自動重啓;
直接上腳本:
輪詢檢測進程(cron)
創建/root/runcron 目錄, (目錄是自己隨便建的)
在這個目錄下存放要執行的shell腳本, 參考腳本在下邊;記得設置腳本的可執行權限
chmod u+x filename
在 /etc/crontab 中添加自己的任務,/root/runcron 是自己創建的,
*/1 * * * * root run-parts /root/runcron
這樣定時任務就自己執行了, 查看命令
tail -f /var/log/cron
日誌會有執行的記錄,如果沒有執行, 就重新啓動下crond服務,
/sbin/service crond reload ##--->> 重新加載
/sbin/service crond restart ## ---->重啓服務
判斷進程是否存在,從而重啓或者殺死
##腳本
#!/bin/bash
#判斷指定進程是否存在
result=`ps -ef | grep -w dbjob | grep -v grep | wc -l`
if [ $result -le 0 ]; then
#不存在, 重啓
nohup java -Xms512m -Xmx1024m -jar /home/project/dbjob.jar &
else
#存在,判斷狀態
#取進程狀態,用來判斷是否僵死
val=`ps -aux | grep dbjob | grep -v grep | awk '{print $8}'`
if [ "$val" == "Z" ];then
# 取進程ID,用來kill掉進程
pid = `ps -aux | grep dbjob | grep -v grep | awk '{print $2}'`
kill -9 $pid
fi
fi