#!/bin/bash

###############################################
# 宝塔 Go 项目 - 更新后自动重启监控脚本
# 用途：检测更新完成后自动重启 Go 项目
# 使用：在宝塔计划任务中每分钟执行一次
###############################################

# ==================== 配置区域 ====================
# Go 项目路径（根据实际情况修改）
PROJECT_DIR="/www/wwwroot/www.lingyaoai.com"

# Go 项目名称（宝塔 Go 项目管理器中的名称）
PROJECT_NAME="lingyaoai"

# 重启标记文件
RESTART_FLAG="$PROJECT_DIR/.restart_required"

# 日志文件
LOG_FILE="$PROJECT_DIR/restart_monitor.log"
# ==================== 配置区域结束 ====================

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

# 检查重启标记文件
if [ -f "$RESTART_FLAG" ]; then
    log "检测到重启标记文件，准备重启服务..."
    
    # 读取标记文件内容（时间戳）
    FLAG_TIME=$(cat "$RESTART_FLAG" 2>/dev/null)
    log "更新时间戳: $FLAG_TIME"
    
    # 删除标记文件
    rm -f "$RESTART_FLAG"
    
    # 等待 3 秒确保旧进程完全退出
    sleep 3
    
    # 方法1：使用宝塔 API 重启 Go 项目（推荐）
    # 宝塔面板的 Go 项目管理器会自动处理
    
    # 方法2：直接启动程序（如果宝塔没有自动重启）
    cd "$PROJECT_DIR"
    
    # 检查进程是否还在运行
    if pgrep -f "nofx-linux" > /dev/null; then
        log "服务仍在运行，等待退出..."
        sleep 5
    fi
    
    # 如果进程已退出，尝试重新启动
    if ! pgrep -f "nofx-linux" > /dev/null; then
        log "服务已停止，正在重新启动..."
        
        # 启动服务（后台运行）
        nohup ./nofx-linux > nofx.log 2>&1 &
        
        sleep 2
        
        # 验证启动
        if pgrep -f "nofx-linux" > /dev/null; then
            log "✅ 服务重启成功！PID: $(pgrep -f 'nofx-linux')"
        else
            log "❌ 服务重启失败，请手动检查"
        fi
    else
        log "服务正在运行，无需重启"
    fi
else
    # 没有重启标记，检查服务是否正常运行
    if ! pgrep -f "nofx-linux" > /dev/null; then
        log "⚠️ 检测到服务未运行，尝试启动..."
        cd "$PROJECT_DIR"
        nohup ./nofx-linux > nofx.log 2>&1 &
        sleep 2
        if pgrep -f "nofx-linux" > /dev/null; then
            log "✅ 服务启动成功"
        fi
    fi
fi
