Linux服务器编写Shell脚本定时监控Java应用状态以及掉线后的自动重启
1. 编写Shell脚本
#! /bin/sh
export JAVA_HOME=/root/jdk1.8.0_361
export CLASSPATH=.:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
# 进程名称
proc_name=webssh-0.0.1-SNAPSHOT.jar
#启动命令
boot_cmd="nohup java -jar /root/webssh-0.0.1-SNAPSHOT.jar &"
# 日志文件
log_file=/root/monitor_webssh.log
num=`ps -ef | grep $proc_name | grep -v grep | wc -l` #获取被监控进程数量
# echo "查询到的进程数量为$num">> $log_file_name
if [ "$num" == "0" ]; # 判断进程是否存在
then
echo "进程挂掉了,开始进行重启,重启开始时间为`date`" >> $log_file
`$boot_cmd` # 重启进程的命令
process_id=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'` # 获取新进程号
echo "进程已重新启动,重启完成时间为`date`,新的进程号为$process_id" >> $log_file # 将新进程号和重启时间记录
else
process_id=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'` # 获取当前进程号
echo "进程正在运行中,当前时间为`date`,当前进程号为$process_id" >> $log_file
fi
注意点1: 该脚本存放路径为:/root/monitor_webssh.sh,根据自己的实际情况自定义;
注意点2: 使用 chmod -755(或者-777) monitor_webssh.sh 命令为脚本文件添加所有人、所属组、其他人的可执行权限;
注意点2: 服务器需要配置好JDK环境;
2. 编辑定时器内容,指定Shell脚本的执行频率
crontab -e #执行该命令,会打开定时器的编辑页面
*/1 * * * * /root/monitor_webssh.sh #每分钟执行一次脚本
*/1 * * * * sleep 30; /root/monitor_webssh.sh #每分钟执行一次脚本,执行前休眠30秒
3. 踩坑
最大的一个坑就是使用crontab定时执行Shell脚本中的java -jar启动命令时,需要在Shell脚本文件的顶部执行JDK系统配置的导出操作,也就是如下的部分:
export JAVA_HOME=/root/jdk1.8.0_361
export CLASSPATH=.:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
没有如上的配置,就无法执行启动命令.这一点比较迷惑,因为在Linux服务器上直接执行java -jar启动命令是可以正常启动的,而且Shell脚本的执行权限全都打开了.
4. 测试
查看日志文件:
手动停止应用程序
再次查看日志文件:
使用命令查看进程信息: