模板驱动文档自动化:告别手工填表,实现业务自助式文档生成
2026/6/10 5:11:18
我直接给你做完整、可直接复制使用的监控重启机制,专门解决你这种Java 服务假死、接口无响应、日志不刷新的问题。
运行
cd /opt/file/dockerfile/server-m-platform/运行
vi check_service.sh运行
#!/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运行
chmod +x check_service.sh运行
./check_service.sh执行后会生成auto_restart.log,查看是否正常:
运行
cat auto_restart.log运行
crontab -e运行
* * * * * /opt/file/dockerfile/server-m-platform/check_service.sh运行
systemctl restart crond它会每 60 秒检查 3 个关键指标:
只要任意一个异常:
✅ 自动杀僵死进程
✅ 自动重新启动 jar
✅ 自动记录重启时间
✅ 永久后台运行
从此以后:
运行
cd /opt/file/dockerfile/server-m-platform/ tail -f auto_restart.logserver-m-platform服务