run_sync.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/bin/bash
  2. # 生意经「近30天」数据同步 —— 供 launchd / cron 调用的入口
  3. # 用法:./sync/run_sync.sh [--days 30]
  4. cd "$(dirname "$0")/.." || exit 1
  5. MK="$(pwd)/sync/life_sync.mjs"
  6. # launchd 的 PATH 只有 /usr/bin:/bin:/usr/sbin:/sbin,ego-browser 不在里面,
  7. # 所以显式定位:优先环境变量,其次常见安装位置,最后才用 PATH 查找
  8. EGO=""
  9. for c in "${EGO_BIN:-}" "$HOME/.local/bin/ego-browser" "/usr/local/bin/ego-browser" \
  10. "/opt/homebrew/bin/ego-browser" "$(command -v ego-browser 2>/dev/null)"; do
  11. [ -n "$c" ] && [ -x "$c" ] && { EGO="$c"; break; }
  12. done
  13. if [ -z "$EGO" ]; then
  14. echo "✗ 找不到 ego-browser,无法同步" | tee -a data/sync_log/FAILED.txt
  15. exit 127
  16. fi
  17. mkdir -p data/sync_log
  18. LOG="data/sync_log/$(date +%Y%m%d_%H%M%S).log"
  19. # 只保留最近 60 份日志
  20. ls -1t data/sync_log/*.log 2>/dev/null | tail -n +61 | xargs -r rm -f
  21. {
  22. echo "===== $(date '+%Y-%m-%d %H:%M:%S') 开始同步 ====="
  23. "$EGO" nodejs <<EOF
  24. globalThis.SYNC_ARGS = $(python3 -c "import json,sys; print(json.dumps(sys.argv[1:]))" "$@");
  25. await import("file://" + encodeURI("$MK"));
  26. EOF
  27. code=$?
  28. echo "===== $(date '+%Y-%m-%d %H:%M:%S') 结束,退出码 $code ====="
  29. exit $code
  30. } 2>&1 | tee "$LOG"
  31. # 失败时在项目里留个醒目标记,方便事后发现
  32. if [ "${PIPESTATUS[0]}" != "0" ]; then
  33. echo "$(date '+%Y-%m-%d %H:%M:%S') 同步失败,日志:$LOG" >> data/sync_log/FAILED.txt
  34. exit 1
  35. fi