初始化
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
# =============================================
|
||||
# 国内服务器:从海外拉取数据并合并到本地 data/raw/
|
||||
# =============================================
|
||||
# 幂等:多次执行不会产生重复数据
|
||||
# 用法:./scripts/domestic_sync.sh [日期]
|
||||
# =============================================
|
||||
set -euo pipefail
|
||||
|
||||
# 从 system.yaml 读取配置
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$SCRIPT_DIR/_load_config.sh"
|
||||
|
||||
LOCAL_DATA="$LOCAL_PROJECT_DIR/data/raw"
|
||||
OVERSEAS_RAW="$CRAWL_PROJECT_DIR/data/raw"
|
||||
PACK_TMP="${SYNC_PACK_DIR:-/tmp}"
|
||||
|
||||
# ── 确定新闻日 ──────────────────────────────────────
|
||||
if [ $# -ge 1 ]; then
|
||||
NEWS_DAY="$1"
|
||||
else
|
||||
CUTOFF=6
|
||||
HOUR=$(date +%H)
|
||||
if [ "$HOUR" -lt "$CUTOFF" ]; then
|
||||
NEWS_DAY=$(date -d "yesterday" +%Y%m%d)
|
||||
else
|
||||
NEWS_DAY=$(date +%Y%m%d)
|
||||
fi
|
||||
fi
|
||||
|
||||
PACK_FILE="en_news_${NEWS_DAY}.tar.gz"
|
||||
|
||||
echo "[$(date)] ═══ 国内同步开始,新闻日: $NEWS_DAY ═══"
|
||||
|
||||
# ── 1. 增量 rsync ─────────────────────────────────
|
||||
echo "[$(date)] [1/4] rsync 增量同步 data/raw/ ..."
|
||||
mkdir -p "$LOCAL_DATA"
|
||||
rsync -avz --ignore-existing \
|
||||
-e "ssh -o ConnectTimeout=10" \
|
||||
"$OVERSEAS_HOST:$OVERSEAS_RAW/" \
|
||||
"$LOCAL_DATA/" \
|
||||
2>&1 | tail -3
|
||||
|
||||
# ── 2. 拉取压缩包 ─────────────────────────────────
|
||||
echo "[$(date)] [2/4] 尝试拉取压缩包 ..."
|
||||
PACK_LOCAL="$PACK_TMP/$PACK_FILE"
|
||||
|
||||
if ssh -o ConnectTimeout=5 "$OVERSEAS_HOST" "[ -f $OVERSEAS_RAW/$PACK_FILE ]" 2>/dev/null; then
|
||||
scp "$OVERSEAS_HOST:$OVERSEAS_RAW/$PACK_FILE" "$PACK_LOCAL" 2>/dev/null
|
||||
echo "[$(date)] 压缩包拉取成功: $PACK_LOCAL ($(du -h "$PACK_LOCAL" | cut -f1))"
|
||||
elif ssh -o ConnectTimeout=5 "$OVERSEAS_HOST" "[ -f /tmp/$PACK_FILE ]" 2>/dev/null; then
|
||||
scp "$OVERSEAS_HOST:/tmp/$PACK_FILE" "$PACK_LOCAL" 2>/dev/null
|
||||
echo "[$(date)] 压缩包拉取成功 (海外 /tmp): $PACK_LOCAL ($(du -h "$PACK_LOCAL" | cut -f1))"
|
||||
else
|
||||
echo "[$(date)] 海外无压缩包,跳过"
|
||||
fi
|
||||
|
||||
# ── 3. 解压合并 ───────────────────────────────────
|
||||
if [ -f "$PACK_LOCAL" ]; then
|
||||
echo "[$(date)] [3/4] 解压合并到 $LOCAL_DATA ..."
|
||||
tar xzf "$PACK_LOCAL" -C "$LOCAL_DATA/" --overwrite 2>&1
|
||||
echo "[$(date)] 解压完成"
|
||||
mkdir -p "$LOCAL_PROJECT_DIR/data/archive"
|
||||
mv "$PACK_LOCAL" "$LOCAL_PROJECT_DIR/data/archive/$PACK_FILE" 2>/dev/null || true
|
||||
else
|
||||
echo "[$(date)] [3/4] 无压缩包,跳过解压"
|
||||
fi
|
||||
|
||||
# ── 4. 验证 ───────────────────────────────────────
|
||||
echo "[$(date)] [4/4] 验证..."
|
||||
echo "[$(date)] 文件数: $(find "$LOCAL_DATA" -type f ! -name '*.tar.gz' | wc -l)"
|
||||
echo "[$(date)] 总大小: $(du -sh "$LOCAL_DATA" 2>/dev/null | cut -f1)"
|
||||
echo "[$(date)] ═══ 国内同步完成 ✅ ═══"
|
||||
Reference in New Issue
Block a user