实现定时执行shell脚本,巡检jar服务是否正常,如果挂掉可以重新启动,并存储检查日志。
1、实现shell脚本
有两个点需要注意:
- 在定时任务中执行脚本,其中的java和jar包路径得是绝对路径
- 不需要把jar包的输出日志打印到脚本检查日志
#!/bin/bash
time=`date "+%Y-%m-%d %H:%M:%S"`
hostname=`hostname`
total=`free -h | awk 'NR==2{print $2}'`
used=`free -h | awk 'NR==2{print $3}'`
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d "."`
cpu_use=`expr 100 - $cpu_idle`
echo "====================CPU==Memory===================="
echo $time $hostname
echo "CPU 使用率:${cpu_use}% CPU空闲:${cpu_idle}%"
echo "总内存$total,已使用内存$used"
echo "====================jar============================"
#启动jar包名称
jars="xx.jar xx.jar xx.jar xx.jar"
for jar in $jars;
do
NR=`ps -ef |grep ${jar} |grep -v "grep" | wc -l`
if [ "$NR" -eq 1 ];
then
echo "$jar 运行正常!"
else
echo "$jar 服务异常,请检查!!!"
echo "准备重新运行$jar服务......"
#java绝对路径
nohup /xx/xx/jxx/xx/java -jar -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxPermSize=1024M /xx/xx/$jar >> /xx/xx/nohup.out &
currentJarService=`ps -ef |grep ${jar} |grep -v "grep" | wc -l`
until [ "$currentJarService" -eq 1 ]
do
currentJarService=`ps -ef |grep ${jar} |grep -v "grep" | wc -l`
done
sleep 10
echo "--------$jar 启动成功--------------"
fi
done
echo "-----------------------服务巡检结束----------------------"
2、设置定时任务
输入crontab -e
设置定时任务
设置每天几点执行脚本,以及脚本路径和检查日志路径,比如每天17:44分自动执行
44 17 * * * sh /xx/xx/xx/xx/check.sh >> /xx/xx/xx/xx/checkLog.txt
以上就完成了,shell巡检脚本