最近寫了一個spark streaming 程序,但是程序跑着跑着就報錯了,而且不會自動重啟,以下腳本實現了程序失敗自動重啟
基本原理:查看程序日志文件是否有ERROR或Exception字樣,有說明報錯了,然后kill進程,重啟程序
#!/usr/bin/env bash #一個死循環,每20s檢測一次 while true do #找到最新的log,程序最新保存的日志 logfile=$(ls -lrt /data1/db_LBS/location/log |awk '{print $NF}' | tail -n 1) #echo ${logfile} #檢查程序是否出錯,邏輯:日志中包含ERROR 或 Exception cat /data1/db_LBS/location/log/${logfile} | grep -E "ERROR|Exception" > error #判斷 error文件是否為空,若不為空則執行if else 邏輯 if [ -s error ] then #----kill 進程 ps -ef | grep -i kafka.sh | awk '{print $2}' | xargs kill -9 ps -ef | grep -i kafkadata | awk '{print $2}' | xargs kill -9 yarn application -list | grep -i db_lbs | awk '{print $1}' | xargs yarn application -kill #----kill 進程 time=$(date +"%Y%m%d%H%M%S") #重啟程序 sh kafka.sh > ../log/log_${time} 2>&1 & fi sleep 20s done