#!/bin/sh # 每日定时任务(替代 Windows autorun.cmd) # 凌晨 4:00 执行,通过 Docker 内网直连 dlweb 容器 # # 原 autorun.cmd 流程: # 1. net stop HttpRequestService (停止 Synchronize.php 轮询) # 2. POST SynchronizeReportData.php(同步报表数据) # 3. net start HttpRequestService (恢复 Synchronize.php 轮询) # # Docker 等价实现:通过共享文件 /shared/syncjob.pause 暂停/恢复 syncjob DLWEB_URL="${DLWEB_INTERNAL_URL:-http://dlweb}" PAUSE_FILE="/shared/syncjob.pause" TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "========================================" echo "[${TIMESTAMP}] 开始执行每日定时任务" echo "========================================" # -------------------------------------------------------- # 1. 停止同步服务(等价于 net stop HttpRequestService) # 创建暂停信号文件,syncjob 检测到后会跳过轮询 # -------------------------------------------------------- echo "[$(date '+%H:%M:%S')] 暂停 syncjob 同步服务..." touch "${PAUSE_FILE}" # 等待当前可能正在执行的请求完成 sleep 5 # -------------------------------------------------------- # 2. 同步报表数据 (SynchronizeReportData.php) # 从游戏数据库同步 report_agent_day、report_game_day 到代理后台 # 并生成 ct_report_info 报表 # 与原 autorun.cmd 一致:不设超时、不重试,等待自然执行完毕 # -------------------------------------------------------- echo "[$(date '+%H:%M:%S')] 开始同步报表数据..." RESULT=$(curl -sf -X POST "${DLWEB_URL}/ext/SynchronizeReportData.php" 2>&1) EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then echo "[$(date '+%H:%M:%S')] 报表同步完成: ${RESULT}" else echo "[$(date '+%H:%M:%S')] 报表同步失败(${EXIT_CODE}): ${RESULT}" fi # -------------------------------------------------------- # 3. 恢复同步服务(等价于 net start HttpRequestService) # 删除暂停信号文件,syncjob 恢复正常轮询 # -------------------------------------------------------- echo "[$(date '+%H:%M:%S')] 恢复 syncjob 同步服务..." rm -f "${PAUSE_FILE}" echo "========================================" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 每日定时任务执行完毕" echo "========================================"