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

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell 脚本通过log和pid监控程序执行并重启jar相关的知识,希望对你有一定的参考价值。

一 案例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脚本见网盘

以上是关于linux shell 脚本通过log和pid监控程序执行并重启jar的主要内容,如果未能解决你的问题,请参考以下文章

Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

linux shell 测试题目,在线等

Linux下磁盘监控脚本

Linux下Shell脚本实战之监测磁盘空间

Shell 脚本实现 Linux 系统监控

Shell #监控进程脚本