206 lines
4.7 KiB
Markdown
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. 监控服务器资源使用情况 |