shell 指令碼: 多執行緒判斷多個程序是否存在,不存在則重啟
阿新 • • 發佈:2018-12-16
shell 預熱
shell 中變數用 $ 區別
在shell指令碼中變數賦值等號前後不能有空格,有空格會被認為是命令
str='測試'
echo $str
arr=('test1' 'test2' 'test3') # 陣列, 每個元素間以空格隔開
echo ${arr[0]} # 陣列的訪問
echo ${#arr[@]} # 陣列長度
shell 中的 for 迴圈和 if
for i in $(seq 1 10) do if [ $i -gt 5];then # if 表示式注意空格 echo $i if #if 結束語 done #for 結束語
shell 中的函式
test(){
if [ $1 -eq 1 ];then # $1為第一個引數,$2為第二個,其他引數依次類推
echo 第一個引數值為$1
return 1
fi
return 0 # return 只能返回 0-255 的整數
}
test 1 # 函式呼叫,0為傳入的第一個引數
res=$? # $?接收函式的返回值
echo res
shell 指令碼判斷多個程序是否存在,如不存在則重啟程序
# !/bin/bash cd ~ proc_names=(‘proc_name1’ ‘proc_name1’ ‘proc_name1’) proc_is_run () { proc_pid=`ps -ef | grep $1 | grep -v grep | awk '{print $2}'` if [ -z '$proc_pid' ];then # echo "$1程序已結束" return 0 else echo "$1程序已存在,pid: $proc_pid" return 1 fi } for i in seq(0 $((${#array[@]}-1))) # $((表示式)) 把字串轉為數字 do proc_is_run ${proc_names[$i]} pid_=$? if [ $pid_ -eq 0 ]; then { sleep 3 echo '重啟 ${proc_names[$i]} 程序' # >>: 表示以追加的形式寫入日誌檔案, > :以覆蓋形式寫入 python 指令碼名 >> logs/指令碼名 .log } & fi done wait # for 迴圈中使用 { 命令 } & 和 wait 實現多執行緒執行多條命令,對多個程序進行判斷,如不使用只能等前一個程序結束以後才能對下一個程序進行判斷 # 命令1 & 命令 1 執行多條命令