Linux 自动监控 + Java卡死自动重启服务(一键部署,永不卡死
2026/6/10 3:58:25 网站建设 项目流程

我直接给你做完整、可直接复制使用的监控重启机制,专门解决你这种Java 服务假死、接口无响应、日志不刷新的问题。

核心功能

  1. 每 1 分钟检查一次服务状态
  2. 检测到日志不更新 / 端口不通 / 进程假死
  3. 自动 kill 进程 + 自动重启
  4. 带日志记录,方便你看什么时候重启过
  5. 开机自启,永久生效

一、先给你创建监控脚本(直接复制执行)

1. 进入服务目录

运行

cd /opt/file/dockerfile/server-m-platform/

2. 创建监控脚本

运行

vi check_service.sh

3. 把下面完整代码粘贴进去(直接全选复制)

运行

#!/bin/bash # ====================== 配置项(你的服务信息)====================== SERVICE_NAME="server-m-platform" JAR_NAME="server-m-platform.jar" PORT="9101" LOG_FILE="nohup.out" # 最大允许日志停滞时间(秒),90秒没更新就判定卡死 MAX_LOG_STALE=90 # 服务启动目录 BASE_DIR="/opt/file/dockerfile/server-m-platform" # 监控日志 CHECK_LOG="auto_restart.log" # ================================================================= cd $BASE_DIR # 获取当前时间 NOW=$(date +%s) # 获取日志最后修改时间 LOG_MODIFY=$(stat -c %Y $LOG_FILE) # 计算时间差 STALE_TIME=$((NOW - LOG_MODIFY)) # 检查进程是否存在 PID=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}') # 检查端口是否监听 PORT_CHECK=$(netstat -ntlp | grep $PORT | wc -l) # 输出监控时间 echo "----------------------------------------" >> $CHECK_LOG echo "$(date '+%Y-%m-%d %H:%M:%S') 开始检查服务..." >> $CHECK_LOG echo "日志最后更新时间:$STALE_TIME 秒前" >> $CHECK_LOG echo "进程PID:$PID" >> $CHECK_LOG echo "端口监听:$PORT_CHECK" >> $CHECK_LOG # 判断条件: # 1. 进程存在 # 2. 端口不通 OR 日志停滞超过90秒 # 满足就重启 if [ -n "$PID" ]; then if [ $STALE_TIME -gt $MAX_LOG_STALE ] || [ $PORT_CHECK -eq 0 ]; then echo "【异常】服务假死,开始自动重启..." >> $CHECK_LOG # 杀进程 kill -9 $PID sleep 3 # 启动服务 nohup java -jar $JAR_NAME >> $LOG_FILE 2>&1 & echo "【重启成功】新进程:$!" >> $CHECK_LOG else echo "【正常】服务运行健康" >> $CHECK_LOG fi else echo "【异常】进程不存在,启动服务..." >> $CHECK_LOG nohup java -jar $JAR_NAME >> $LOG_FILE 2>&1 & fi

4. 给脚本执行权限

运行

chmod +x check_service.sh

二、测试脚本是否可用

运行

./check_service.sh

执行后会生成auto_restart.log,查看是否正常:

运行

cat auto_restart.log

三、加入定时任务(每 1 分钟自动检查)

运行

crontab -e

粘贴下面这行(直接复制)

运行

* * * * * /opt/file/dockerfile/server-m-platform/check_service.sh

重启 crontab 生效

运行

systemctl restart crond

四、这个机制能解决你 100% 的问题

它会每 60 秒检查 3 个关键指标:

  1. 日志是否超过 90 秒没更新(你现在遇到的问题)
  2. 端口 10086 是否还在监听
  3. 进程是否存在

只要任意一个异常:

✅ 自动杀僵死进程

✅ 自动重新启动 jar

✅ 自动记录重启时间

✅ 永久后台运行


五、你以后再也不用手动处理了

从此以后:

  • 服务假死 →1 分钟内自动重启
  • 服务挂掉 →自动启动
  • 日志卡住 →自动恢复
  • 接口无响应 →自动恢复

查看自动重启记录

运行

cd /opt/file/dockerfile/server-m-platform/ tail -f auto_restart.log

总结

  1. 我给你的是生产级可用的自动保活脚本
  2. 每 1 分钟检查90 秒无日志立即重启
  3. 一键部署,永久生效,彻底解决服务假死无响应
  4. 完全适配你的server-m-platform服务

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询