trading.ai/docs/MARKET_SCANNER_DOCKER.md
2025-10-01 09:58:52 +08:00

206 lines
4.7 KiB
Markdown

# 市场扫描Docker定时任务配置
## 概述
本文档描述如何使用Docker容器定时执行`main.py market 200`命令进行股票市场扫描分析。
## 服务组件
### 1. 市场扫描服务 (trading-market-scanner)
- **容器名称**: `trading-ai-market-scanner`
- **功能**: 定时执行股票市场扫描和K线形态分析
- **扫描对象**: 同花顺热榜前N只股票
- **通知**: 支持钉钉webhook通知
### 2. 主要文件
- `market_scanner.py` - 市场扫描脚本
- `start_market_scanner.sh` - 容器启动脚本
- `crontab/market-scanner` - 定时任务配置
- `docker-compose.yml` - Docker编排配置
## 定时任务配置
### 默认调度计划
```bash
# 每个工作日开盘前扫描 (09:00) - 200只股票
0 9 * * 1-5 cd /app && python market_scanner.py 200
# 每个工作日午休时间扫描 (12:30) - 100只股票
30 12 * * 1-5 cd /app && python market_scanner.py 100
# 每个工作日收盘后扫描 (15:30) - 200只股票
30 15 * * 1-5 cd /app && python market_scanner.py 200
# 每周末进行一次深度扫描 (周六 10:00) - 500只股票
0 10 * * 6 cd /app && python market_scanner.py 500
```
### 自定义调度
可通过修改 `crontab/market-scanner` 文件来自定义定时任务:
```bash
# 格式: 分钟 小时 日 月 星期 命令
# 每15分钟扫描一次 (交易时间内)
*/15 9-15 * * 1-5 cd /app && python market_scanner.py 50
# 每小时扫描一次
0 * * * * cd /app && python market_scanner.py 100
```
## 环境变量配置
### 必要配置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `MARKET_SCAN_STOCKS` | 200 | 扫描的股票数量 |
| `LOG_LEVEL` | INFO | 日志级别 |
| `MYSQL_HOST` | - | MySQL主机地址 |
| `MYSQL_PORT` | 26558 | MySQL端口 |
| `MYSQL_USER` | root | MySQL用户名 |
| `MYSQL_PASSWORD` | - | MySQL密码 |
| `MYSQL_DATABASE` | tradingai | 数据库名 |
### 可选配置
| 变量名 | 说明 |
|--------|------|
| `DINGTALK_WEBHOOK_URL` | 钉钉通知webhook地址 |
## 部署步骤
### 1. 环境配置
复制并编辑环境变量文件:
```bash
cp .env.example .env
# 编辑 .env 文件,配置数据库连接和扫描参数
```
### 2. 启动服务
```bash
# 启动市场扫描服务
docker-compose up -d trading-market-scanner
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f trading-market-scanner
```
### 3. 验证部署
```bash
# 查看容器状态
docker ps | grep trading-ai-market-scanner
# 查看定时任务配置
docker exec trading-ai-market-scanner cat /etc/cron.d/market-scanner
# 查看扫描日志
docker exec trading-ai-market-scanner tail -f /app/logs/market_scanner.log
```
## 日志管理
### 日志文件位置
- `/app/logs/market_scanner.log` - 市场扫描日志
- `/app/logs/cron.log` - Cron执行日志
- `/app/logs/scanner_startup.log` - 服务启动日志
### 日志轮转
- 日志文件按日轮转
- 保留30天历史日志
- 自动压缩旧日志文件
## 监控和运维
### 健康检查
服务包含自动重启机制,如果进程异常退出会自动重启。
### 手动执行扫描
```bash
# 进入容器手动执行扫描
docker exec -it trading-ai-market-scanner python market_scanner.py 100
# 查看扫描结果
docker exec trading-ai-market-scanner tail -20 /app/logs/market_scanner.log
```
### 修改定时任务
1. 编辑 `crontab/market-scanner` 文件
2. 重启容器使配置生效:
```bash
docker-compose restart trading-market-scanner
```
### 调试模式
设置更详细的日志级别:
```bash
# 在 .env 文件中设置
LOG_LEVEL=DEBUG
# 重启服务
docker-compose restart trading-market-scanner
```
## 注意事项
1. **时区设置**: 容器使用 Asia/Shanghai 时区
2. **资源消耗**: 扫描大量股票会消耗较多CPU和内存
3. **网络依赖**: 需要稳定的网络连接访问股票数据API
4. **数据库连接**: 确保MySQL数据库可正常连接
5. **存储空间**: 定期清理日志文件避免磁盘空间不足
## 故障排除
### 常见问题
1. **容器启动失败**
```bash
# 查看启动日志
docker-compose logs trading-market-scanner
```
2. **定时任务不执行**
```bash
# 检查cron服务状态
docker exec trading-ai-market-scanner service cron status
# 查看cron日志
docker exec trading-ai-market-scanner tail -f /app/logs/cron.log
```
3. **数据库连接失败**
```bash
# 检查环境变量配置
docker exec trading-ai-market-scanner env | grep MYSQL
```
4. **内存不足**
```bash
# 减少扫描股票数量
MARKET_SCAN_STOCKS=50
```
### 性能优化
1. 根据服务器性能调整扫描频率和股票数量
2. 设置合理的日志级别避免过多日志输出
3. 定期清理历史数据和日志文件
4. 监控服务器资源使用情况