# 定时任务说明 Docker 部署包含两个定时任务容器,替代原 Windows 环境的 `HttpRequestService.exe` 和 `autorun.cmd`。 --- ## syncjob — 实时同步任务 **替代:** Windows `HttpRequestService.exe`(通过 `HttpRequest.exe.json` 配置) **作用:** 每 30 秒 POST 请求 `dlweb/ext/Synchronize.php`,从游戏数据库 `ct_user_process_log` 表消费未处理日志,将玩家/代理数据同步到代理后台数据库。 **运行方式:** 通过 Docker 内网直连 `http://dlweb/ext/Synchronize.php`,不经过公网域名,零流量消耗。 ### 可配置项(`.env`) ```bash # 轮询间隔(秒),默认 30 SYNC_INTERVAL=30 # 每次处理的日志条数,默认 200 SYNC_PROCESSCOUNT=200 ``` ### 查看同步日志 ```bash ./deploy.sh logs syncjob # 或实时查看 docker logs -f youle-syncjob ``` ### 调整同步频率 ```bash # 修改 .env SYNC_INTERVAL=15 # 15 秒一次 SYNC_PROCESSCOUNT=500 # 每次处理 500 条 # 重启 syncjob docker compose restart syncjob ``` --- ## cronjob — 每日定时任务 **替代:** Windows 计划任务调用的 `tools-docker/autorun.cmd` **作用:** 每日凌晨 4:00 执行以下流程(与原 `autorun.cmd` 完全一致): | 步骤 | 原 autorun.cmd | Docker cronjob | |------|---------------|----------------| | 1. 停止同步服务 | `net stop HttpRequestService` | 创建 `/shared/syncjob.pause` 信号文件 | | 2. 等待当前请求完成 | (Windows 服务立即停止) | `sleep 5` | | 3. 同步报表数据 | `HttpRequest.exe POST SynchronizeReportData.php` | `curl POST http://dlweb/ext/SynchronizeReportData.php` | | 4. 恢复同步服务 | `net start HttpRequestService` | 删除 `/shared/syncjob.pause` 信号文件 | > **暂停机制:** `syncjob` 和 `cronjob` 通过共享 Docker volume(`shared-signal`)通信。`cronjob` 创建 `/shared/syncjob.pause` 文件时,`syncjob` 会自动跳过轮询,报表同步完成后删除该文件恢复。 ### 可配置项(`.env`) ```bash # cron 表达式,默认凌晨 4:00 CRON_SCHEDULE=0 4 * * * ``` **修改执行时间示例:** ```bash # 凌晨 3:30 执行 CRON_SCHEDULE=30 3 * * * # 每天凌晨 2:00 和 14:00 各执行一次 CRON_SCHEDULE=0 2,14 * * * ``` ### 查看执行日志 ```bash ./deploy.sh logs cronjob # 或实时查看 docker logs -f youle-cronjob ``` ### 手动触发(测试用) ```bash docker exec youle-cronjob /bin/sh /app/daily-task.sh ``` ### 调整每日任务执行时间 ```bash # 修改 .env CRON_SCHEDULE=30 3 * * * # 改为凌晨 3:30 # 重启 cronjob docker compose restart cronjob ``` --- ## 临时停止定时任务(维护数据库时) ```bash docker compose stop syncjob cronjob # 维护完成后恢复 docker compose up -d syncjob cronjob ```