Просмотр исходного кода

refactor: merge run.sh into tiku-server serve --restart

nonvioce 3 месяцев назад
Родитель
Сommit
c344f4a98a
3 измененных файлов с 26 добавлено и 32 удалено
  1. 22 7
      tiku-server/app/main.py
  2. 4 3
      tiku-server/install.sh
  3. 0 22
      tiku-server/run.sh

+ 22 - 7
tiku-server/app/main.py

@@ -85,13 +85,15 @@ def main():
         print("用法: tiku-server <命令> [参数]")
         print()
         print("命令:")
-        print("  serve              启动 FastAPI 服务")
+        print("  serve              启动服务")
+        print("  serve --restart    启动服务(崩溃/更新后自动重启)")
         print("  knowledge build    重建知识点编码")
         print("  rebuild-index      手动增量索引")
         print("  stats              终端统计")
         print("  backup             手动备份")
         print("  backup --remote    推送到 WebDAV")
         print("  token              显示/重新生成 API token")
+        print("  token regenerate   重新生成 API token")
         sys.exit(1)
 
     cmd = sys.argv[1]
@@ -100,12 +102,25 @@ def main():
 
     if cmd == "serve":
         import uvicorn
-        uvicorn.run(
-            create_app(cfg),
-            host=cfg.host,
-            port=cfg.port,
-            log_level="info",
-        )
+        auto_restart = len(sys.argv) > 2 and sys.argv[2] == "--restart"
+
+        def run():
+            uvicorn.run(
+                create_app(cfg),
+                host=cfg.host,
+                port=cfg.port,
+                log_level="info",
+            )
+
+        if auto_restart:
+            import time as _time
+            while True:
+                print(f"{_time.strftime('%Y-%m-%d %H:%M:%S')} 启动服务端...")
+                run()
+                print(f"{_time.strftime('%Y-%m-%d %H:%M:%S')} 服务端退出,2 秒后重启...")
+                _time.sleep(2)
+        else:
+            run()
     elif cmd == "knowledge":
         if len(sys.argv) > 2 and sys.argv[2] == "build":
             from app.services.knowledge import build_knowledge

+ 4 - 3
tiku-server/install.sh

@@ -136,9 +136,10 @@ echo ""
 echo "API Token: $(grep -oP 'token:\s*"\K[^"]+' config.yaml 2>/dev/null || echo '(查看 config.yaml)')"
 echo ""
 echo "启动命令:"
-echo "  cd $SCRIPT_DIR"
-echo "  source .venv/bin/activate"
-echo "  ./tiku-server serve"
+echo "  cd $SCRIPT_DIR && source .venv/bin/activate"
+echo "  nohup ./tiku-server serve --restart > tiku.log 2>&1 &"
+echo ""
+echo "  或使用 systemd (下方创建)"
 echo ""
 echo "访问: http://localhost:8765"
 echo ""

+ 0 - 22
tiku-server/run.sh

@@ -1,22 +0,0 @@
-#!/usr/bin/env bash
-# ══════════════════════════════════════════════════════════════
-# 题库PLUS 服务端启动 + 自动重启脚本
-# git-update 触发 SIGTERM 后自动重启
-# ══════════════════════════════════════════════════════════════
-
-cd "$(dirname "$0")"
-
-# 首次启动前确保已安装
-if [ ! -d ".venv" ]; then
-    echo "请先运行 install.sh 进行安装"
-    exit 1
-fi
-
-source .venv/bin/activate
-
-while true; do
-    echo "$(date '+%Y-%m-%d %H:%M:%S') 启动服务端..."
-    .venv/bin/python tiku-server serve
-    echo "$(date '+%Y-%m-%d %H:%M:%S') 服务端退出,2 秒后重启..."
-    sleep 2
-done