linux shell 脚本通过log和pid监控程序执行并重启jar
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脚本见网盘
相关文章
- linux每日命令(33):diff命令
- linux每日命令(10):touch命令
- 转载:Linux内核参数的优化(1.3.4)《深入理解Nginx》(陶辉)
- 启动jar包并生成日志的linux脚本
- centos 7.5 linux版本设置jar包开机自启动
- 在linux服务器启动jar包的5种方式,不看后悔终生
- linux下查看制定端口的开发情况
- 一个漂亮的 Linux 桌面 REST 客户端:Insomnia 3.0
- 在 Linux 中使用日志来排错
- spring boot jar包 linux 部署
- 比较war包在Linux或windows服务器上启动及使用 java -jar xxx.jar 或nohup java -jar xxx.jar启动在Linux服务器上的spring boot jar
- Linux 系统 杀Oracle 进程
- Linux命名空间学习教程(一) UTS
- 【Linux 内核】Linux 内核源码根目录下的文件 ( .clang-format | COPYING | CREDITS | Kbuild | Kconfig | MAINTAINERS )
- Linux下ffmpeg安装与开发配置
- Linux的修炼之道:从小工到专家
- linux网络编程(二)网络套接字编程
- Linux下打包压缩war和解压war包 zip和jar
- Linux:库文件的生成与使用
- Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant