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. 测试

查看日志文件:

手动停止应用程序

再次查看日志文件:

使用命令查看进程信息:

posted @ 2023-03-22 16:19  安徒生敲代码  阅读(1530)  评论(1编辑  收藏  举报