#!/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 "========================================"