#!/bin/bash # 部署 market-sync systemd units 到 /etc/systemd/system/ # 2026-07-09 新增: market-sync-worker.service(长驻进程, 调度 schedule_* 任务) # # 用法: sudo bash bin/deploy_systemd.sh # # 跑这个脚本会: # 1. 复制 bin/systemd/market-sync*.{service,timer} 到 /etc/systemd/system/ # 2. systemctl daemon-reload # 3. enable + start market-sync-worker.service # 4. 不动已存在的 .timer (它们都已 enable, 重复 enable 无副作用) set -euo pipefail REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" SYSTEMD_SRC="$REPO_DIR/bin/systemd" SYSTEMD_DST="/etc/systemd/system" if [ "$(id -u)" -ne 0 ]; then echo "❌ 必须用 sudo 跑: sudo bash $0" >&2 exit 1 fi echo "=== 1. 复制 unit files ===" for f in "$SYSTEMD_SRC"/market-sync*.{service,timer}; do [ -f "$f" ] || continue name="$(basename "$f")" cp -v "$f" "$SYSTEMD_DST/$name" chmod 644 "$SYSTEMD_DST/$name" done echo "" echo "=== 2. daemon-reload ===" systemctl daemon-reload echo "" echo "=== 3. 启用 + 启动 worker 长驻进程(关键!) ===" if ! systemctl is-enabled --quiet market-sync-worker.service; then systemctl enable market-sync-worker.service fi # 如果已通过 nohup 启动了, 先 kill 掉避免双跑 if pgrep -f "app\.entrypoints\.worker" >/dev/null; then echo " ⚠️ 检测到手动启动的 worker 进程, 先 kill" pkill -TERM -f "app\.entrypoints\.worker" || true sleep 2 pkill -KILL -f "app\.entrypoints\.worker" 2>/dev/null || true fi systemctl restart market-sync-worker.service sleep 2 systemctl status market-sync-worker.service --no-pager | head -10 echo "" echo "=== 4. 列出所有 market-sync timer (验证) ===" systemctl list-timers market-sync* --no-pager 2>&1 | head -20 echo "" echo "✅ 部署完成" echo " - 长驻 worker: systemctl status market-sync-worker.service" echo " - 看任务执行: tail -f logs/worker_manual_*.log (本进程) 或 journalctl -u market-sync-worker -f (systemd 接管后)" echo " - 巡检: .venv/bin/python bin/daily_sync_check.py"