当前位置: 首页 > news >正文

Linux服务器定时监测服务脚本

这两天我们有个服务出现了很严重的内存泄漏问题,本来按说既然是内存泄漏问题那我们就找到内存泄漏原因然后解决掉就行了,但是因为那个服务不是我写的,然后现在又很忙抽不出那么多时间,所以就先用临时的方法补救一下,写个监测脚本发现不对就自动重启

脚本内容如下(脚本名称:monitor.sh)
注意我这里是根据 CPU 使用率判断的,因为这个服务即使内存泄漏很严重但是服务本身没有挂掉还在运行,只是请求进不去了
下面脚本加了一些内容,因为我发现有的服务器上环境变量不对启动不了 jar 包,还有就是有的程序启动的时候会有一段时间 CPU 占比非常大,所以又加了一个冷却时间,防止一直重启

#!/bin/bashAPP_HOME="/data/application/app"
JAR_NAME="app-1.0.jar"
LOG_FILE="$APP_HOME/monitor.log"
RESTART_RECORD="$APP_HOME/.last_restart_time"# 设置 Java 环境
export JAVA_HOME=/data/midsoftware/ali_jdk_8.16.17
export PATH=$JAVA_HOME/bin:$PATH# 进入应用目录
cd $APP_HOME || { echo "Failed to cd $APP_HOME"; exit 1; }PID=$(ps aux | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')CURRENT_TIME=$(date +%s)
COOLDOWN=150   # 150秒冷却时间LAST_RESTART=0
if [ -f "$RESTART_RECORD" ]; thenLAST_RESTART=$(cat "$RESTART_RECORD")
fiif [ -z "$PID" ]; then# 服务未运行,启动sh startup.shecho "$(date '+%F %T') Service not running, starting..." >> $LOG_FILEdate +%s > "$RESTART_RECORD"   # 记录启动时间
else# 检查 CPU# CPU=$(ps -p $PID -o %cpu= | awk '{print int($1)}')CPU=$(top -b -n1 -p $PID | tail -n +8 | awk '{print int($9)}')echo "$(date '+%F %T') PID=$PID CPU=${CPU}%" >> $LOG_FILECPU_THRESHOLD=80TIME_DIFF=$(( CURRENT_TIME - LAST_RESTART ))if [ "$CPU" -gt "$CPU_THRESHOLD" ]; thenif [ "$TIME_DIFF" -lt "$COOLDOWN" ]; thenecho "$(date '+%F %T') CPU exceed $CPU_THRESHOLD%, but within cooldown period, skipping restart." >> $LOG_FILEelseecho "$(date '+%F %T') CPU exceed $CPU_THRESHOLD%, restarting service..." >> $LOG_FILEsh shutdown.shsleep 5sh startup.shecho "$(date '+%F %T') Restarted service" >> $LOG_FILEdate +%s > "$RESTART_RECORD"   # 更新重启时间fifi
fi

然后我们把它加到定时任务里面去

crontab -e

在里面加入一行(注意自己的脚本路径和名称)

* * * * * /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1

上面的是每分钟执行一次,服务器上的定时任务最小的粒度就是一分钟了,如果想更细的粒度比如每十秒检查一次可以写成下面这样的

* * * * * /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1
* * * * * sleep 10; /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1
* * * * * sleep 20; /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1
* * * * * sleep 30; /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1
* * * * * sleep 40; /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1
* * * * * sleep 50; /data/application/app/monitor.sh >> /data/application/app/monitor.log 2>&1

检查一下看是否添加成功,如果下面命令里面能看到你家的那条记录就说明成功了

crontab -l

等一两分钟我们再去看下日志(注意自己的路径)

tail -f /data/application/app/monitor.log

能看到下面这样的

root@ecs-v2:/data/application/app# tail -f /data/application/app/monitor.log
2025-08-22 09:36:01 PID=1736316 CPU=22%
2025-08-22 09:37:01 PID=1736316 CPU=22%
2025-08-22 09:38:01 PID=1736316 CPU=22%
2025-08-22 09:39:01 PID=1736316 CPU=22%
2025-08-22 09:40:01 PID=1736316 CPU=22%

还有那种服务直接挂了重启的脚本,其它的和上面一样,加入到定时任务里面就可以了

#!/bin/bash
APP_HOME=/data/application/app
JAR_NAME=app-1.0.jar
START_SCRIPT=$APP_HOME/startup.sh# 找到进程 PID
PID=$(ps aux | grep $JAR_NAME | grep -v grep | awk '{print $2}')cd $APP_HOMEif [ -z "$PID" ]; thensh $START_SCRIPTecho "服务已挂掉,已自动重启,时间:`date '+%Y-%m-%d %T'`" >> $APP_HOME/restart_record.log
fi
http://www.dtcms.com/a/344538.html

相关文章:

  • det_cam_visualizer.py 函数逐行解读记录
  • (纯新手教学)计算机视觉(opencv)实战八——四种边缘检测详解:Sobel、Scharr、Laplacian、Canny
  • Redis 678
  • 2025-08-22 Python进阶10——魔术方法
  • K8s的相关知识总结
  • X00238-非GNSS无人机RGB图像卫星图像视觉定位python
  • Django中间件自定义开发指南:从原理到实战的深度解析
  • 广播级讯道摄像机CCU后挂上的PGM、ENG、PROD音频旋钮是做什么用的?
  • js:beforeUnload这个方法能不能监听到关闭浏览器和刷新浏览器行为
  • 视觉语言大模型应用开发——基于 CLIP、Gemini 与 Qwen2.5-VL 的视频理解内容审核全流程实现
  • uniapp image标签展示视频第一帧
  • 【Linux】Vim编辑器:从入门到高效使用
  • MiniCPM-V4.0开源并上线魔乐社区,多模态能力进化,手机可用,还有最全CookBook!
  • WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能
  • 聚焦科技前沿,华金证券与非凸科技共探数智交易新路径
  • 【GaussDB】全密态等值查询功能测试及全密态技术介绍
  • UNIKGQA论文笔记
  • SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在邮件/短信发送功能上的全面横向对比报告
  • 全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
  • #Datawhale 组队学习#8月-工作流自动化n8n入门-2
  • 基于51单片机的超声波液位检测OLED显示设计
  • MySQL InnoDB表空间深度解析:从原理到性能优化
  • Seaborn数据可视化实战:Seaborn与Plotly交互式图表入门
  • 图像处理中的伪影
  • ASPICE过程能力确定——度量框架
  • 美国对华科技政策思路变化:产业影响与投资逻辑解析
  • C/C++三方库移植到HarmonyOS平台详细教程
  • 2025年推理大模型有哪些以及优势对比
  • C++函数重载与引用详解
  • 线段树01