JAR包自启动与进程监控重启

990 阅读1分钟
#!/bin/bash

#时间
TIME=$(date "+%Y-%m-%d %H:%M:%S")
#需要启动并监测服务的路径
JAR_PATH=$(cd $(dirname $0); pwd)
echo "-------${TIME}-------需要启动并监测服务的路径:"${JAR_PATH}
#遍历文件夹下所有的jar包
for JAR in `ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'`
# 此处可以修改“/*/*”这个地方,修改读取目录位置,当前是读取xx/xx/下面的jar包
do
 #jar包名称
 JAR_NAME=$(basename $JAR)
 #单个jar包地址
 echo "--------正在检测jar:"${JAR_NAME}
 echo "jar包地址:"${JAR}
 #jar包目录
 JAR_PARH=$(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 "$JAR_NAME:正在运行,PID=$PID"
 else
   #启动服务
   exec nohup java -Xms256m -Xmx256m -Xmn200m -Xss256k -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 "$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 "$JAR_NAME:已经启动成功,PID=$PID"
 fi
 #换行
 echo ""
done