生产环境实战!!!
脚本功能:
-
通过ps -ef判断java程序是否存活
-
通过Recv-Q的值判断java程序是否处于阻塞状态
出现以上两种情况,自动重启java程序
#!/bin/bash
source /etc/profile
source ~/.bash_profile
source ~/.bashrc
#设置jar包名称
java_process_name="test.jar"
#设置jar包存放路径
java_process_dir="/home/test"
#java运行日志日志文件
temp_log="temp.log"
#java重启日志
java_process="java_process.log"
#时间
date_time=$(date)
#判断java进行是否存活
java_process=$(ps -ef | grep "$java_process_name" | grep -v "grep")
#输出分隔符
echo "---------------------------------------------------"
#判断Java进程是否存在
if [ -n "$java_process" ]; then
echo "Java程序正在运行" $date_time
echo $java_process
else
echo "Java程序未运行,正在重启..." >>$java_process_dir/$java_process
# 重启Java程序的命令,根据实际情况修改
cd $java_process_dir
kill `pgrep -f $java_process_name`
sleep 10
echo "停止完毕" $date_time
nohup java -jar ./$java_process_name >> $temp_log &
echo "执行完毕" $date_time
#sleep 50
#重启完毕之后直接退出脚本,不再执行Recv-Q判断
exit 1
fi
#输出分隔符
echo "---------------------------------------------------"
recv_e=$(pgrep -f $java_process_name)
recv_q=$(netstat -ntpl | grep $recv_e | awk '{print $2}')
#判断Recv-Q是否等于0,大于0说明java程序接收堵塞
if [ "$recv_q" != "0" ]; then
echo "Recv-Q不等于0,重启Java程序-----" $date_time >>$java_process_dir/$java_process
cd $java_process_dir
kill `pgrep -f $java_process_name`
echo "停止完毕" $date_time
sleep 10
nohup java -jar ./$java_process_name >> $temp_log &
echo "执行完毕" $date_time
#sleep 10
else
echo "Recv-Q等于0,程序正常运行" $date_time
echo $(netstat -ntpl | grep $recv_e)
fi