Files
youlegames/codes/agent/game-docker/docs/02-scheduled-tasks.md

2.7 KiB
Raw Blame History

定时任务说明

Docker 部署包含两个定时任务容器,替代原 Windows 环境的 HttpRequestService.exeautorun.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

# 轮询间隔(秒),默认 30
SYNC_INTERVAL=30

# 每次处理的日志条数,默认 200
SYNC_PROCESSCOUNT=200

查看同步日志

./deploy.sh logs syncjob
# 或实时查看
docker logs -f youle-syncjob

调整同步频率

# 修改 .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 信号文件

暂停机制: syncjobcronjob 通过共享 Docker volumeshared-signal)通信。cronjob 创建 /shared/syncjob.pause 文件时,syncjob 会自动跳过轮询,报表同步完成后删除该文件恢复。

可配置项(.env

# cron 表达式,默认凌晨 4:00
CRON_SCHEDULE=0 4 * * *

修改执行时间示例:

# 凌晨 3:30 执行
CRON_SCHEDULE=30 3 * * *

# 每天凌晨 2:00 和 14:00 各执行一次
CRON_SCHEDULE=0 2,14 * * *

查看执行日志

./deploy.sh logs cronjob
# 或实时查看
docker logs -f youle-cronjob

手动触发(测试用)

docker exec youle-cronjob /bin/sh /app/daily-task.sh

调整每日任务执行时间

# 修改 .env
CRON_SCHEDULE=30 3 * * *   # 改为凌晨 3:30

# 重启 cronjob
docker compose restart cronjob

临时停止定时任务(维护数据库时)

docker compose stop syncjob cronjob
# 维护完成后恢复
docker compose up -d syncjob cronjob