植物萌斗炸服检测脚本

植物萌斗炸服检测脚本

#!/bin/bash

 # 监控脚本:monitor_game_port.sh
 # 功能:监控端口10011,不可用时重启游戏
 # 作者:自动生成
 # 日期:2026-03-12

 # 设置环境变量
 LOG_DIR="./logs"
 MONITOR_LOG="$LOG_DIR/monitor_game_port.log"
 STATE_FILE="./monitor_state.txt"
 MONITOR_PORT=10011

 # 创建日志目录
 mkdir -p $LOG_DIR

 # 日志记录函数
 log_message() {
     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $MONITOR_LOG
     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
 }

 # 检查端口是否可用
 check_port() {
     if netstat -tuln | grep ":$MONITOR_PORT " > /dev/null; then
         return 0
     else
         return 1
     fi
 }

 # 停止游戏函数
 stop_game() {
     log_message "开始停止游戏..."
     
     log_message "执行 cd /data && ./qd.sh,输入2停止服务"
     cd /data && echo "2" | ./qd.sh
     
     log_message "等待10秒..."
     sleep 10
 }

 # 启动游戏函数
 start_game() {
     log_message "启动游戏服务..."
     cd /data && echo "1" | ./qd.sh
     
     log_message "退出脚本,输入0"
     echo "0" | ./qd.sh
     
     log_message "游戏已启动并退出脚本"
 }

 # 重启游戏
 restart_game() {
     log_message "端口 $MONITOR_PORT 不可用,开始重启游戏..."
     
     log_message "执行 cd /data && ./qd.sh"
     log_message "输入2停止服务 -> 等10秒 -> 输入命令启动游戏 -> 输入0退出脚本"
     
     cd /data && (echo "2"; sleep 10; echo "1"; sleep 2; echo "0") | ./qd.sh
     
     log_message "游戏重启完成"
 
     if [ -f "$STATE_FILE" ]; then
         count=$(cat "$STATE_FILE" | grep "restart_count" | cut -d'=' -f2)
         count=$((count + 1))
     else
         count=1
     fi
     echo "restart_count=$count" > "$STATE_FILE"
     echo "last_restart=$(date '+%s')" >> "$STATE_FILE"
     log_message "重启次数已更新:$count"
 }

 # 主监控循环
 main_monitor() {
     log_message "游戏端口监控服务启动 (监控端口: $MONITOR_PORT)"

     while true; do
         if check_port; then
             log_message "端口 $MONITOR_PORT 正常"
         else
             restart_game
         fi

         sleep 30
     done
 }

 # 查看状态
 show_status() {
     echo "========== 监控服务状态 =========="

     if [ -f "$STATE_FILE" ]; then
         count=$(cat "$STATE_FILE" | grep "restart_count" | cut -d'=' -f2)
         last_restart=$(cat "$STATE_FILE" | grep "last_restart" | cut -d'=' -f2)

         echo "重启次数: $count"

         if [ -n "$last_restart" ]; then
             last_restart_time=$(date -d "@$last_restart" '+%Y-%m-%d %H:%M:%S')
             echo "上次重启时间: $last_restart_time"
         fi
     else
         echo "重启次数: 0"
         echo "上次重启时间: 从未"
     fi

     if pgrep -f "duankzhonqi.sh" | grep -v $$ > /dev/null; then
       echo "服务状态: 运行中"
   else
       echo "服务状态: 未运行"
   fi

     if check_port; then
         echo "端口 $MONITOR_PORT 状态: 正常"
     else
         echo "端口 $MONITOR_PORT 状态: 不可用"
     fi
     echo "====================================="
 }

 # 启动服务
start_service() {
   if pgrep -f "duankzhonqi.sh" | grep -v $$ > /dev/null; then
       echo "监控服务已经在运行中"
   else
       log_message "启动监控服务..."
       nohup ./duankzhonqi.sh monitor > /dev/null 2>&1 &
       log_message "监控服务已启动"
       echo "监控服务已启动"
   fi
}

 # 停止服务
stop_service() {
   log_message "停止监控服务..."
   pkill -f "duankzhonqi.sh"
   log_message "监控服务已停止"
   echo "监控服务已停止"
}

 # 主入口
 case "$1" in
     start)
         start_service
         ;;
     stop)
         stop_service
         ;;
     status)
         show_status
         ;;
     monitor)
         main_monitor
         ;;
     *)
         echo "用法: $0 {start|stop|status|monitor}"
         echo ""
         echo "命令说明:"
         echo "  start   - 启动监控服务(后台运行)"
         echo "  stop    - 停止监控服务"
         echo "  status  - 查看监控服务状态"
         echo "  monitor - 前台运行监控(直接在终端显示日志)"
         exit 1
         ;;
 esac

duankzhonqi.sh
监控端口文件
放进去root里面炸服会自动重启
后台运行:

./duankzhonqi.sh start

 

停止监控:

./duankzhonqi.sh stop

查看状态:

./duankzhonqi.sh status

 

前台运行:

./duankzhonqi.sh monitor
THE END
喜欢就支持一下吧
点赞14 分享
羡余的头像-头号咸鱼-rp1的小站
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容