Linux 监测 jar 运行状况
使用Linux脚本文件实时监测 jar 的运行状况,运行停止后自动重启。
编写监测脚本
要监测 jar 包是否在运行,需要查看当前进程中是否有该进程,没有的话需要重启。
#!/bin/sh
#判断指定进程是否存在
result1=`ps -ef | grep -w xxx | grep -v grep | wc -l`
result2=`ps -ef | grep -w yyy | grep -v grep | wc -l`
if [ $result1 -le 0 ]; then
#不存在, 后台重启并写入临时日志文件
nohup /usr/java/jdk1.8.0_251-amd64/bin/java -jar /usr/java/jar/app/xxx.jar > /usr/java/jar/app/xxx.txt &
elif [ $result2 -le 0 ]; then
#不存在, 后台重启并写入临时日志文件
nohup /usr/java/jdk1.8.0_251-amd64/bin/java -jar /usr/java/jar/app/yyy.jar > /usr/java/jar/app/yyy.txt &
fi
- ps -ef:该指令用来查询所有进程
- grep -w:通过管道来过滤,用于字符串精确匹配
- grep -v grep:grep -v 指令是反向查询的意思,grep -v grep 的作用是除去包含 grep 的项
- wc -l:统计查询到的结果数量
- xxx/yyy:jar 包的名字
定期执行sh
该 sh 需要手动执行,为了实时监测,可以通过 crontab 来定期执行。
Linux crontab 是用来定期执行程序的命令。当安装完成操作系统后,默认便会启动此任务调度命令。
该命令会每分钟定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
在Linux中输入:
crontab -e
编写如下指令,意思为每隔 3 秒执行一次:
/1 * * * * /usr/java/jar/monitorApp.sh
/1 * * * * sleep 3 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 6 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 9 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 12 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 15 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 18 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 21 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 24 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 27 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 30 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 33 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 36 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 39 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 42 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 45 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 48 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 51 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 54 && /usr/java/jar/monitorApp.sh
/1 * * * * sleep 57 && /usr/java/jar/monitorApp.sh
注:crontab 不会读取系统的环境变量,需要在 monitorApp.sh 中将 java 命令的绝对路径写上。