| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- #!/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 <<EOF
- globalThis.SYNC_ARGS = $(python3 -c "import json,sys; print(json.dumps(sys.argv[1:]))" "$@");
- await import("file://" + encodeURI("$MK"));
- EOF
- code=$?
- echo "===== $(date '+%Y-%m-%d %H:%M:%S') 结束,退出码 $code ====="
- exit $code
- } 2>&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
|