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的主要内容,如果未能解决你的问题,请参考以下文章