乙個簡單的指令碼守護程序

2021-07-22 16:48:10 字數 2760 閱讀 9567

專案過程中,經常會有很多的指令碼,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 監...