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

111 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 定时任务说明
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
```