2.7 KiB
2.7 KiB
定时任务说明
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)
# 轮询间隔(秒),默认 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 信号文件 |
暂停机制:
syncjob和cronjob通过共享 Docker volume(shared-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