專案過程中,經常會有很多的指令碼,shell指令碼
、php指令碼
、python指令碼
等,更有一些指令碼是需要常駐記憶體執行的,簡而言之就是需要while(true){}
的模式執行。
但是有的時候,乙個常駐記憶體的程序會因為某些耗時操作而夯住
,不再往下繼續執行,成為了乙個殭屍程序
;或者因為某個操作偶然出錯,直接退出了;所以我們需要有一套簡單的機制來保證程序一直處於活躍狀態。
以乙個php指令碼為例:
指令碼名稱:script/monitor/collect.class.php
class
collect
extends \framework\frameworkscript }}
}
守護程序指令碼名稱:script/monitor/watch.sh
#!/bin/bash
# @author xianliezhao
# crontab命令:
# 監控線上服務穩定性情況
# */1 * * * * sh /home/work/script/monitor/watch.sh start >> /home/work/logs/script_monitor_watch.log
# php命令
php="/home/service/php/bin/php /home/work/mlservice/goods/public/script.php"
# 在這裡配置所有需要【守護】的php程序
proc_list='monitor\\collect monitor\\realtimeanalytics'
#work 賬戶執行
name=$(whoami)
if[ $name != 'work' ];then
echo `date "+%y/%m/%d %h:%m:%s> "` "必須用work賬戶"
exit
fi#開啟服務
start() '| wc -l)
if[ $ = 0 ];then
$php $(echo
$proc | awk -f"\\"
'') >/dev/null &
echo `date "+%y/%m/%d %h:%m:%s> "` "$proc 程序已經重啟"
else
echo `date "+%y/%m/%d %h:%m:%s> "` "$proc 程序已經存在"
fidone
}#停止服務
stop() ')
for p in
$arrproc; do
kill $p;
echo `date "+%y/%m/%d %h:%m:%s> "` $p
" 程序已殺死!"
done
done
echo `date "+%y/%m/%d %h:%m:%s> "` "服務已停止!"
}#check指令碼是否執行
check() ')
echo `date "+%y/%m/%d %h:%m:%s> "` "目前執行的服務監控程序($proc):"
$done
}usage()
while
true;do
case $1
in start)
start
break
;;
help)
usage
break
;;stop)
stop
break
;;check)
check
break
;;*)
usage
break
;;esac
shift
done
[work@script-01 monitor]$ sh watch.sh
守護程序使用方法(需要 work 使用者執行):
usage: sh watch.sh check|start|stop|restart
start 啟動服務
stop 停止服務
check 檢查服務是否正常
[work@script-01 monitor]$ sh watch.sh check
2015/09/24 15:10:48> 目前執行的服務監控程序(monitor\\collect): 65321
2015/09/24 15:10:48> 目前執行的服務監控程序(monitor\\realtimeanalytics): 無
[work@script-01 monitor]$ sh watch.sh start
2015/09/24 15:11:26> monitor\\collect 程序已經重啟
2015/09/24 15:11:26> monitor\\realtimeanalytics 程序已經重啟
# crontab命令:
# 監控線上服務穩定性情況
*/1 * * * * sh /home/work/script/monitor/watch.sh start >> /home/work/logs/script_monitor_watch.log
每分鐘檢測一次,沒有啟動則自動重啟!通過這種方式來保證,指令碼一定不死。 用php實現乙個簡單的守護程序,多程序
首先我們要知道建立守護程序的五個步驟 建立子程序,終止父程序 在子程序中建立新會話 改變工作目錄 預設繼承了父程序的當前工作目錄 重設檔案建立掩碼 預設繼承了父程序的檔案建立掩碼 關閉檔案描述符 預設繼承了父程序開啟了的檔案 還要安裝有pcntl擴充套件,可通過php m檢視是否安裝 然後直接上 f...
乙個簡單的Shell指令碼
最近新學linux的shell程式設計。試著寫了乙個遍歷資源目錄的子目錄,每個資源子目錄中拷貝10個檔案到目標目標的小指令碼。沒有什麼技術含量,只是防止自己忘記。bin sh srcroot vsu data2 datasource npm fiveminute srcpath null myroo...
乙個程序監控指令碼程式
功能 監控指定的程序是否正常執行,如果執行則休眠,過一段時間再檢測一下,如果監控的程序沒有執行,則啟動該程式 指令碼名demo.sh bin sh echo while 1 dopidof 1 if 0 then echo 1 is not run now begin to run.hello1 監...