zl程序教程

您现在的位置是:首页 >  系统

当前栏目

linux shell 脚本通过log和pid监控程序执行并重启jar

Linuxjar监控logshell 通过 脚本 重启
2023-09-27 14:22:13 时间

一 案例1 通过监控jar包的pid,进行重启

1.1 脚本内容

1.脚本内容:

时刻监控程序的pid,存在则提示正在运行;若不存在则进行重新jar包;并删除大于2天前的日志文件。

#!/bin/bash
source /etc/profile
rdatetime=`date +"%Y-%m-%d %H:%M:%S"`

if [ `ps -ef|grep java|grep idaa-app-analysisSolrHistoryNews|awk '{print $2}'` ]
 then
  pid=`ps -ef|grep java|grep idaa-app-analysisSolrHistoryNews|awk '{print $2}'`
  echo "${rdatetime}:idaa-app-analysisSolrHistoryNews is running...pid:${pid}"
  echo "${rdatetime}:idaa-app-analysisSolrHistoryNews is running...pid:${pid}">>/home/new-idaa-analysis/logs/idaa-app-analysisSolrHistoryNews.log
else
   cd /home/new-idaa-analysis/idaa-app-analysisSolrHistoryNews/bin
   nohup ./startup.sh >/dev/null 2>&1 &
   pid=`ps -ef|grep java|grep idaa-app-analysisSolrHistoryNews|awk '{print $2}'`
   echo "${rdatetime}:restart idaa-app-analysisSolrHistoryNews is running...pid:${pid}"
   echo "${rdatetime}:restart idaa-app-analysisSolrHistoryNews is running...pid:${pid}">>/home/new-idaa-analysis/logs/idaa-app-analysisSolrHistoryNews.log
fi
exec find  /home/new-idaa-analysis/logs/ -mtime +2 -type f |xargs rm -f

二 案例2 通过监控jar包的log,进行重启

2.1 脚本内容

1.监控jar包的日志,最新的一条记录;在规定的时间没有新的日志,则杀掉当前程序的pid,然后重启启动,最后并删除掉大于两天前的日志文件。

#!/bin/bash
source /etc/profile
########初始化一些配置#########
logDir=/root/export/servers/jiaoben/logs/gldevicestoptotaltask/gldevicestoptotaltask.log
#单位s
timeRange=30;
APP_NAME=test-jar.jar
APP_DIR=/root/export/servers/jiaoben
APP_CONFIG_FILE=application.yml
MONITOR_DIR=/root/export/servers/jiaoben/jk-logs
#创建监控脚本存储目录
 mkdir -p $MONITOR_DIR
jk_log=$MONITOR_DIR"/monitor-shell.log"
#获取日志最新时间
#lastLogTime='2023-01-03 17:35:04.970';
lastLogTime=`tail -n 1 ${logDir}  |awk '{print $1,$2}'`
lastLogFormatTime=`date -d "${lastLogTime}" "+%Y-%m-%d %H:%M:%S"`
echo "最新日志时间:" $lastLogFormatTime   >> $jk_log
#获取当前时间
currNowTime=`date +"%Y-%m-%d %H:%M:%S"`
echo "当前时间:" $currNowTime   >> $jk_log
#计算差值
duration=$(($(date +%s -d "${currNowTime}")-$(date +%s -d "${lastLogFormatTime}")));
echo "时间差:" $duration"s"  >> $jk_log
#判断
if [ $duration -gt $timeRange ];
 then
    echo "时间差大于: "${timeRange}" 判断重启服务....."  >> $jk_log
    pid=`ps -ef|grep java|grep ${APP_NAME}|awk '{print $2}'`
    echo "pid:"${pid}    >> $jk_log
    #如果存在,kill掉,重启,-z pandu changdu wei 0    
  if [ -z "${pid}" ]; then
      echo ${APP_NAME}" 程序进程号不存在!!!!!"  >> $jk_log
  else
  
     kill -9 $pid
    echo "${APP_NAME} is already shutdown,kill pid :"$pid   >> $jk_log
    #启动jar包
    nohup java -jar -Dfile.encoding=utf-8  -Dspring.config.location=${APP_DIR}/${APP_CONFIG_FILE}   ${APP_DIR}/${APP_NAME}  > nohup.out 2>&1 &
    pid=`ps -ef|grep java|grep ${APP_NAME}|awk '{print $2}'`
    rdatetime=`date +"%Y-%m-%d %H:%M:%S"`
    echo "${rdatetime}:restart ${APP_NAME} is running...pid:${pid}"  >> $jk_log

  fi
else
   echo "时间差不大于:" ${timeRange} "s, 程序正常,日志正常输出......"  >> $jk_log
fi
  exec find  $MONITOR_DIR"/" -mtime +2 -type f |xargs rm -f   
echo "...................................本次分析结束................................."    >> $jk_log

说明:一些常见shell脚本见网盘