157 lines
4.6 KiB
Bash
Executable File
157 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Public Domain Poetry Scraper - Start Script
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
LOG_DIR="$SCRIPT_DIR/logs"
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
show_help() {
|
|
echo "📝 Public Domain Poetry Scraper"
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " ./start.sh fetch # Phase 1: 获取诗人列表 (A-Z)"
|
|
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/poets_index.json"
|
|
echo " 诗歌: /home/ubuntu/media/public-domain-poetry/"
|
|
echo " 日志: logs/"
|
|
}
|
|
|
|
case "${1:-help}" in
|
|
fetch|index)
|
|
echo "🔍 Phase 1: 获取诗人列表..."
|
|
python3 "$SCRIPT_DIR/scripts/fetch_poets.py"
|
|
;;
|
|
|
|
download)
|
|
echo "📥 Phase 2: 开始下载(前台模式)..."
|
|
python3 "$SCRIPT_DIR/scripts/download_poems.py"
|
|
;;
|
|
|
|
download-bg|bg)
|
|
echo "📥 Phase 2: 开始后台下载..."
|
|
|
|
# 检查是否已在运行
|
|
if pgrep -f "download_poems.py" > /dev/null; then
|
|
echo "⚠️ 下载进程已在运行"
|
|
echo "查看日志: tail -f $LOG_DIR/download.log"
|
|
exit 1
|
|
fi
|
|
|
|
# 后台运行
|
|
nohup python3 "$SCRIPT_DIR/scripts/download_poems.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_poems.py" > /dev/null; then
|
|
echo "✅ 后台下载正在运行"
|
|
pgrep -f "download_poems.py" | xargs ps -o pid,etime,%cpu,%mem,command -p
|
|
else
|
|
echo "⏹️ 后台下载未运行"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# 显示索引统计
|
|
if [ -f "$SCRIPT_DIR/config/poets_index.json" ]; then
|
|
python3 -c "
|
|
import json
|
|
import os
|
|
|
|
with open('$SCRIPT_DIR/config/poets_index.json') as f:
|
|
data = json.load(f)
|
|
poets = data.get('poets', [])
|
|
pending = len([p for p in poets if p['status'] == 'pending'])
|
|
downloaded = len([p for p in poets if p['status'] == 'downloaded'])
|
|
failed = len([p for p in poets if p['status'] == 'failed'])
|
|
|
|
# 实际目录统计
|
|
media_dir = '/home/ubuntu/media/public-domain-poetry'
|
|
if os.path.exists(media_dir):
|
|
poet_dirs = [d for d in os.listdir(media_dir) if os.path.isdir(os.path.join(media_dir, d))]
|
|
poem_files = 0
|
|
for poet_dir in poet_dirs:
|
|
poet_path = os.path.join(media_dir, poet_dir)
|
|
poem_files += len([f for f in os.listdir(poet_path) if f.endswith('.txt')])
|
|
else:
|
|
poet_dirs = []
|
|
poem_files = 0
|
|
|
|
print(f'📚 诗人统计:')
|
|
print(f' 总计: {len(poets)}')
|
|
print(f' 待下载: {pending}')
|
|
print(f' 已完成: {downloaded}')
|
|
print(f' 失败: {failed}')
|
|
print(f'')
|
|
print(f'📁 存储统计:')
|
|
print(f' 诗人目录: {len(poet_dirs)}')
|
|
print(f' 诗歌文件: {poem_files}')
|
|
print(f'')
|
|
print(f'上次索引更新: {data.get(\"fetch_date\", \"unknown\")[:19]}')
|
|
"
|
|
else
|
|
echo "❌ 索引文件不存在,请先运行: ./start.sh fetch"
|
|
fi
|
|
|
|
echo ""
|
|
echo "📁 存储位置: /home/ubuntu/media/public-domain-poetry/"
|
|
;;
|
|
|
|
stop)
|
|
echo "⏹️ 停止后台下载..."
|
|
|
|
if pgrep -f "download_poems.py" > /dev/null; then
|
|
pkill -f "download_poems.py"
|
|
echo "✅ 已停止"
|
|
else
|
|
echo "⚠️ 没有运行的下载进程"
|
|
fi
|
|
;;
|
|
|
|
reset)
|
|
echo "⚠️ 这将重置索引"
|
|
read -p "确定继续? (y/N): " confirm
|
|
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
|
rm -f "$SCRIPT_DIR/config/poets_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
|