最近写了一个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