Files
sanguo_quant_live/zhaoyun-data/scripts/data_acquisition/robust_minute_download.sh
T
2026-03-28 00:14:34 +08:00

107 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# 健壮分钟数据下载启动脚本
# 包含错误处理和自动重启功能
echo "========================================"
echo "🚀 赵云分钟数据下载器 - 健壮版启动"
echo "========================================"
# 配置参数
BASE_DIR="/Users/chufeng/nas/stock/minute_kline"
LOG_DIR="$BASE_DIR/logs"
SCRIPT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live/zhaoyun-data/scripts/data_acquisition"
SCRIPT_NAME="simple_downloader.py"
# 创建日志目录
mkdir -p "$LOG_DIR"
# 生成唯一的日志文件名
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$LOG_DIR/robust_download_${TIMESTAMP}.log"
PID_FILE="$SCRIPT_DIR/minute_download.pid"
echo "📊 配置信息:"
echo " 数据目录: $BASE_DIR"
echo " 日志文件: $LOG_FILE"
echo " 脚本目录: $SCRIPT_DIR"
echo " 开始时间: $(date)"
echo ""
# 检查是否已有进程在运行
if [ -f "$PID_FILE" ]; then
OLD_PID=$(cat "$PID_FILE")
if ps -p $OLD_PID > /dev/null 2>&1; then
echo "⚠️ 已有下载进程在运行 (PID: $OLD_PID)"
echo " 停止旧进程..."
kill $OLD_PID
sleep 2
fi
fi
# 启动下载进程
echo "🚀 启动分钟数据下载进程..."
cd "$SCRIPT_DIR"
# 使用无限循环,出错后自动重启
while true; do
echo "$(date): 开始新下载周期..." >> "$LOG_FILE"
# 启动下载进程
nohup python3 "$SCRIPT_NAME" \
--timeframe 15min \
--start-date "2021-01-01" \
--end-date "2026-03-27" \
--batch-size 100 \
--max-workers 8 \
--retry-count 3 \
--all-stocks \
>> "$LOG_FILE" 2>&1 &
# 记录进程ID
DOWNLOAD_PID=$!
echo $DOWNLOAD_PID > "$PID_FILE"
echo "✅ 下载进程已启动 (PID: $DOWNLOAD_PID)"
echo "📄 日志文件: $LOG_FILE"
echo "⏱️ 开始时间: $(date)"
# 等待进程完成
wait $DOWNLOAD_PID
EXIT_CODE=$?
echo "$(date): 下载进程退出,代码: $EXIT_CODE" >> "$LOG_FILE"
# 检查退出代码
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ 下载任务正常完成"
echo "$(date): 下载任务正常完成" >> "$LOG_FILE"
break
elif [ $EXIT_CODE -eq 130 ]; then
echo "🛑 用户手动终止 (Ctrl+C)"
echo "$(date): 用户手动终止" >> "$LOG_FILE"
break
else
echo "⚠️ 下载进程异常退出 (代码: $EXIT_CODE)"
echo "⏳ 5秒后自动重启..."
echo "$(date): 进程异常退出,5秒后重启" >> "$LOG_FILE"
sleep 5
# 检查网络连接
echo "🔍 检查网络连接..."
if ping -c 3 baidu.com > /dev/null 2>&1; then
echo "✅ 网络连接正常"
else
echo "❌ 网络连接异常,等待30秒..."
sleep 30
fi
fi
done
# 清理
rm -f "$PID_FILE"
echo ""
echo "========================================"
echo "⏱️ 下载任务结束时间: $(date)"
echo "📄 完整日志: $LOG_FILE"
echo "========================================"