#!/bin/bash # 生意经「近30天」数据同步 —— 供 launchd / cron 调用的入口 # 用法:./sync/run_sync.sh [--days 30] cd "$(dirname "$0")/.." || exit 1 MK="$(pwd)/sync/life_sync.mjs" # launchd 的 PATH 只有 /usr/bin:/bin:/usr/sbin:/sbin,ego-browser 不在里面, # 所以显式定位:优先环境变量,其次常见安装位置,最后才用 PATH 查找 EGO="" for c in "${EGO_BIN:-}" "$HOME/.local/bin/ego-browser" "/usr/local/bin/ego-browser" \ "/opt/homebrew/bin/ego-browser" "$(command -v ego-browser 2>/dev/null)"; do [ -n "$c" ] && [ -x "$c" ] && { EGO="$c"; break; } done if [ -z "$EGO" ]; then echo "✗ 找不到 ego-browser,无法同步" | tee -a data/sync_log/FAILED.txt exit 127 fi mkdir -p data/sync_log LOG="data/sync_log/$(date +%Y%m%d_%H%M%S).log" # 只保留最近 60 份日志 ls -1t data/sync_log/*.log 2>/dev/null | tail -n +61 | xargs -r rm -f { echo "===== $(date '+%Y-%m-%d %H:%M:%S') 开始同步 =====" "$EGO" nodejs <&1 | tee "$LOG" # 失败时在项目里留个醒目标记,方便事后发现 if [ "${PIPESTATUS[0]}" != "0" ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') 同步失败,日志:$LOG" >> data/sync_log/FAILED.txt exit 1 fi