1. 程式人生 > >shell 指令碼: 多執行緒判斷多個程序是否存在,不存在則重啟

shell 指令碼: 多執行緒判斷多個程序是否存在,不存在則重啟

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 執行多條命令