stop.sh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/bin/zsh
  2. # stop.sh — 停止传奇流水线管理系统
  3. # 用法: ./stop.sh 完全停止(停全部 Runner + 主进程)
  4. # ./stop.sh --pause 只关"自动执行"(Runner 继续跑, 系统在线)
  5. set -euo pipefail
  6. cd "$(dirname "$0")"
  7. if [[ "${1:-}" == "--pause" ]]; then
  8. curl -s -X POST localhost:8765/api/scheduler/config \
  9. -H 'Content-Type: application/json' \
  10. -d '{"configs":{"scheduler_enabled":"0"}}'
  11. echo
  12. echo "已暂停自动执行(正在跑的 Runner 不受影响; ./start.sh 后在界面重新打开开关即恢复)"
  13. exit 0
  14. fi
  15. # ① 停全部 Runner(业务路径收尾: run 记录/打勾文件完整)
  16. RUNNERS=$(pgrep -f "pbot.runner_cli" || true)
  17. if [[ -n "$RUNNERS" ]]; then
  18. echo "停止 Runner: $RUNNERS"
  19. curl -s -X POST localhost:8765/api/runners/stop-all && echo
  20. sleep 3
  21. # 兜底: 仍存活的直接 SIGTERM
  22. LEFT=$(pgrep -f "pbot.runner_cli" || true)
  23. [[ -n "$LEFT" ]] && echo "$LEFT" | xargs kill 2>/dev/null || true
  24. else
  25. echo "无 Runner 在跑"
  26. fi
  27. # ② 停主进程(优雅退出: 自动停调度器并 SIGTERM 残余子进程)
  28. MAIN=$(pgrep -f "pbot.db.serve" || true)
  29. if [[ -n "$MAIN" ]]; then
  30. echo "停止主进程: $MAIN"
  31. echo "$MAIN" | xargs kill 2>/dev/null || true
  32. sleep 2
  33. LEFT2=$(pgrep -f "pbot.db.serve" || true)
  34. [[ -n "$LEFT2" ]] && echo "$LEFT2" | xargs kill -9 2>/dev/null || true
  35. else
  36. echo "主进程未在运行"
  37. fi
  38. echo "已完全停止。剩余检查: $(pgrep -f 'pbot.db.serve|pbot.runner_cli' || echo '无')"