run.sh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/bin/sh
  2. # 观澜 · 启动/停止/重启/状态(Linux / macOS)—— 与 Windows 的 run.bat 等价。
  3. #
  4. # 用法:
  5. # sh run.sh start 启动全部服务(等价 <PY> guanlan.py serve)
  6. # sh run.sh stop 停止全部服务
  7. # sh run.sh restart 先停后起
  8. # sh run.sh status 服务状态(端口 / pid / 存活)
  9. # sh run.sh status --json 机器可读状态
  10. # sh run.sh help 本说明
  11. # 其余参数原样透传给 guanlan.py,例如: sh run.sh start --only algorithm,web
  12. set -e
  13. cd "$(dirname "$0")" || exit 1
  14. export PYTHONUTF8=1
  15. pick_python() {
  16. if [ -x ".venv/bin/python" ]; then echo ".venv/bin/python"; return 0; fi
  17. for c in python3.12 python3.13 python3.11 python3; do
  18. p=$(command -v $c 2>/dev/null) && { echo "$p"; return 0; }
  19. done
  20. return 1
  21. }
  22. PY=$(pick_python) || {
  23. echo "[X] 找不到 Python 3(.venv 也没有)—— 请先跑 install.sh" >&2
  24. exit 2
  25. }
  26. SUB=${1:-help}
  27. case "$SUB" in
  28. start) shift; exec "$PY" guanlan.py serve "$@" ;;
  29. stop) exec "$PY" guanlan.py stop ;;
  30. restart) "$PY" guanlan.py stop; exec "$PY" guanlan.py serve ;;
  31. status) shift; exec "$PY" guanlan.py status "$@" ;;
  32. help|"") cat <<'EOF'
  33. 用法: sh run.sh <start|stop|restart|status|help> [选项]
  34. start 启动全部服务 stop 停止全部服务
  35. restart 先停后起 status 服务状态(--json 为机器可读)
  36. help 本说明
  37. EOF
  38. ;;
  39. *) exec "$PY" guanlan.py "$@" ;;
  40. esac