@echo off chcp 65001 >nul REM 服务监控脚本 - Windows版本 REM 用于外部监控服务状态 setlocal enabledelayedexpansion set "SERVICE_NAME=AI小红书服务" set "ALERT_PHONE=15707023967" set "HEARTBEAT_FILE=%TEMP%\ai_xhs_service_heartbeat.json" set "CHECK_INTERVAL=120" echo ======================================== echo 服务监控检查 - %date% %time% echo ======================================== echo. REM 检查心跳文件是否存在 if not exist "%HEARTBEAT_FILE%" ( echo [错误] 心跳文件不存在: %HEARTBEAT_FILE% echo [错误] 服务可能未启动或已宕机 goto :SEND_ALERT ) echo [信息] 心跳文件: %HEARTBEAT_FILE% REM 读取心跳文件内容 for /f "delims=" %%i in ('powershell -Command "Get-Content '%HEARTBEAT_FILE%' | ConvertFrom-Json | Select-Object -ExpandProperty last_heartbeat"') do ( set "LAST_HEARTBEAT=%%i" ) if "!LAST_HEARTBEAT!"=="" ( echo [错误] 无法读取心跳信息 goto :SEND_ALERT ) echo [信息] 上次心跳: !LAST_HEARTBEAT! REM 计算时间差(使用PowerShell) for /f %%i in ('powershell -Command "$now=[DateTime]::Now; $last=[DateTime]::Parse('!LAST_HEARTBEAT!'); ($now - $last).TotalSeconds"') do ( set "TIME_DIFF=%%i" ) REM 去除小数点 for /f "tokens=1 delims=." %%a in ("!TIME_DIFF!") do set "TIME_DIFF_INT=%%a" echo [信息] 距离上次心跳: !TIME_DIFF_INT! 秒 REM 检查是否超时 if !TIME_DIFF_INT! GTR %CHECK_INTERVAL% ( echo [错误] 服务可能已宕机(超过%CHECK_INTERVAL%秒未更新心跳) goto :SEND_ALERT ) echo [信息] 服务运行正常 echo. echo ======================================== echo 检查完成 - 状态正常 echo ======================================== exit /b 0 :SEND_ALERT echo. echo [警告] 检测到服务异常,正在发送通知... echo. REM 发送宕机通知 cd /d %~dp0 go run test_service_alert.go if %ERRORLEVEL% EQU 0 ( echo [信息] 宕机通知发送成功 ) else ( echo [错误] 宕机通知发送失败 ) echo. echo ======================================== echo 检查完成 - 服务异常 echo ======================================== pause exit /b 1