Linux进阶实时监控进程运行

275 阅读2分钟

linux jar包自启动与进程监控重启

前期调研

实现效果

使用说明

第一步

第二步

前期调研

共调研三个技术:

systemctl:systemctl 系统自动,效率高,实现效果也很好。但是会存在主进程和子进程的概念,实践过程中这种方法没法监测每一个子进程,只能监控最后一个进程是否死掉(目前作者未找到,可再研究)

while:脚本无线循环,出现问题的几率会很大

crontab:系统定时任务,最终采用该方案,crontab系统自带,无需维护(但是有可能需要启动),crond.service自启动,就节约设置自启动步骤。实现自启动与检测两个功能

实现效果

每分钟检测脚本所在子文件夹下所有java jar进程,如果进程停止则立刻自动重启。

使用说明

部署目录结构(必须遵守该结构),如:

#--------IFOX

#----短信服务(sms-service)

#----地区服务(area-service)

#----脚本process_protection.sh

第一步

创建检测jar包脚本 process_protection.sh:

#!/bin/bash

@author xiaotao

@date 2019/8/22

#时间

TIME=$(date "+%Y-%m-%d %H:%M:%S")

#需要启动并监测服务的路径

JAR_PATH=(cd(cd (dirname $0); pwd)

echo "-------TIME需要启动并监测服务的路径:"{TIME}-------需要启动并监测服务的路径:"{JAR_PATH}

#遍历文件夹下所有的jar包

for JAR in ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'

do

#jar包名称

JAR_NAME=(basename(basename JAR)

#单个jar包地址

echo "--------正在检测jar:"${JAR_NAME}

echo "jar包地址:"${JAR}

#jar包目录

JAR_PARH=(dirname(dirname JAR)

echo "jar包目录:"${JAR_PARH}

#获取程序运行情况

PID=ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'

#判断进程是否已经启动,启动继续下一个检测

if [ -n "$PID" ];then

#抛出提示

echo "JARNAME:正在运行,PID=JAR_NAME:正在运行,PID=PID"

else

#启动服务

exec nohup java -Xms256m -Xmx256m -Xmn200m -Xss256k -jar JAR>>JAR >> JAR_PARH/catalina.out 2>&1 &

#获取PID

PID=ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'

echo "启动时PID:${PID}"

#自循环判定是否启动

COUNT=0

while [ -z "$PID" ]

do

#一定时间内服务未启动抛出错误提示并终止启动程序

if (($COUNT == 30));then

#启动失败

echo "JARNAME:JAR_NAME:(expr $count * 10)秒内未启动,请检查!"

break

fi

count=((((count+1))

#启动过程输出提示

echo "$JAR_NAME 启动中.................."

#时间阻断:10s

sleep 10s

#获取PID

PID=ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'

echo "启动后循环PID:${PID}"

done

echo "JARNAME:已经启动成功,PID=JAR_NAME:已经启动成功,PID=PID"

fi

#换行

echo ""

done

上传脚本到linux部署根目录下

设置process_protection.sh为可执行文件

chmod +x process_protection.sh

第二步

查看是否安装crontab

执行命令crontab -l

c337cdf91e3313e7f8dd92d8f4d69b7e.png

systemctl status crond.service

5ad45f012fe6d99d808b02491e554dfa.png

设置定时任务

*/1 * * * * sh /项目根目录/process_protection.sh > /项目根目录/process_protection.log 2>&1

##效果展示

运行结果

e9567708f68ffb71f9ccd6e98d5bba17.png

reboot后照常执行定时任务