#!/bin/bash # Loyal Books Scraper - Start Script SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" LOG_DIR="$SCRIPT_DIR/logs" mkdir -p "$LOG_DIR" show_help() { echo "📚 Loyal Books Scraper - Children Category" echo "" echo "Usage:" echo " ./start.sh fetch # Phase 1: 获取书籍列表和下载链接" echo " ./start.sh download # Phase 2: 开始下载(前台)" echo " ./start.sh download-bg # Phase 2: 后台下载" echo " ./start.sh status # 查看下载状态" echo " ./start.sh stop # 停止后台下载" echo " ./start.sh reset # 重置索引" echo "" echo "目录:" echo " 索引: config/loyalbooks_children_index.json" echo " 存储: /home/ubuntu/media/loyalbooks/Children/" echo " 日志: logs/" echo "" echo "存储结构:" echo " /home/ubuntu/media/loyalbooks/Children/" echo " └── Book-Name/" echo " ├── Book-Name.txt" echo " └── mp3_64kb.zip" } case "${1:-help}" in fetch|index) echo "🔍 Phase 1: 获取书籍列表..." echo "抓取 6 页 Children 分类,约 585 本书" python3 "$SCRIPT_DIR/scripts/fetch_books.py" ;; download) echo "📥 Phase 2: 开始下载(前台模式)..." python3 "$SCRIPT_DIR/scripts/download_books.py" ;; download-bg|bg) echo "📥 Phase 2: 开始后台下载..." # 检查是否已在运行 if pgrep -f "download_books.py" > /dev/null; then echo "⚠️ 下载进程已在运行" echo "查看日志: tail -f $LOG_DIR/download.log" exit 1 fi # 后台运行 nohup python3 "$SCRIPT_DIR/scripts/download_books.py" \ > "$LOG_DIR/download.log" 2>&1 & PID=$! echo "✅ 后台进程已启动 (PID: $PID)" echo "" echo "查看状态:" echo " 实时日志: tail -f $LOG_DIR/download.log" echo " 停止下载: ./start.sh stop" ;; status) echo "📊 下载状态" echo "" # 检查进程 if pgrep -f "download_books.py" > /dev/null; then echo "✅ 后台下载正在运行" pgrep -f "download_books.py" | xargs ps -o pid,etime,%cpu,%mem,command -p else echo "⏹️ 后台下载未运行" fi echo "" # 显示索引统计 if [ -f "$SCRIPT_DIR/config/loyalbooks_children_index.json" ]; then python3 -c " import json import os with open('$SCRIPT_DIR/config/loyalbooks_children_index.json') as f: data = json.load(f) books = data.get('books', []) pending = len([b for b in books if b['status'] == 'pending']) downloaded = len([b for b in books if b['status'] == 'downloaded']) failed = len([b for b in books if b['status'] == 'failed']) with_txt = sum(1 for b in books if b.get('txt_url')) with_mp3 = sum(1 for b in books if b.get('mp3_zip_url')) # 实际目录统计 media_dir = '/home/ubuntu/media/loyalbooks/children' if os.path.exists(media_dir): book_dirs = [d for d in os.listdir(media_dir) if os.path.isdir(os.path.join(media_dir, d))] else: book_dirs = [] print(f'📚 书籍统计:') print(f' 总计: {len(books)}') print(f' 待下载: {pending}') print(f' 已完成: {downloaded}') print(f' 失败: {failed}') print(f'') print(f'📋 资源可用性:') print(f' 有 TXT: {with_txt}') print(f' 有 MP3 ZIP: {with_mp3}') print(f'') print(f'📁 存储统计:') print(f' 书籍目录: {len(book_dirs)}') print(f'') print(f'上次索引更新: {data.get(\"fetch_date\", \"unknown\")[:19]}') " else echo "⏳ 索引文件不存在,请先运行: ./start.sh fetch" fi echo "" echo "📁 存储位置: /home/ubuntu/media/loyalbooks/children/" ;; stop) echo "⏹️ 停止后台下载..." if pgrep -f "download_books.py" > /dev/null; then pkill -f "download_books.py" echo "✅ 已停止" else echo "⚠️ 没有运行的下载进程" fi ;; reset) echo "⚠️ 这将重置索引" read -p "确定继续? (y/N): " confirm if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then rm -f "$SCRIPT_DIR/config/loyalbooks_children_index.json" echo "✅ 索引已重置" else echo "👋 已取消" fi ;; log|logs) if [ -f "$LOG_DIR/download.log" ]; then tail -50 "$LOG_DIR/download.log" else echo "暂无日志文件" fi ;; help|--help|-h) show_help ;; *) echo "❌ 未知命令: $1" show_help exit 1 ;; esac