diff --git a/leaudit.sh b/leaudit.sh index 9660f55..44c3bdf 100755 --- a/leaudit.sh +++ b/leaudit.sh @@ -3,11 +3,14 @@ PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" FRONTEND_DIR="$PROJECT_DIR/legal-platform-frontend" BACKEND_DIR="$PROJECT_DIR" +WORKER_SCRIPT="$PROJECT_DIR/scripts/start_worker.sh" LOG_DIR="$PROJECT_DIR/.codex-run" BACKEND_PID_FILE="$LOG_DIR/backend.pid" FRONTEND_PID_FILE="$LOG_DIR/frontend.pid" +WORKER_PID_FILE="$LOG_DIR/worker.pid" BACKEND_LOG="$LOG_DIR/backend.log" FRONTEND_LOG="$LOG_DIR/frontend.log" +WORKER_LOG="$LOG_DIR/worker.log" RED='\033[0;31m' GREEN='\033[0;32m' @@ -196,6 +199,41 @@ start_frontend() { return 1 } +start_worker() { + cleanup_pid_file "$WORKER_PID_FILE" + local pid + pid=$(service_pid "$WORKER_PID_FILE") + if pid_alive "$pid"; then + log_warn "Worker 已在运行 (PID: $pid)" + return 0 + fi + + if [ ! -x "$WORKER_SCRIPT" ]; then + log_error "Worker 启动脚本不存在或不可执行: $WORKER_SCRIPT" + return 1 + fi + + log_info "启动 Worker 服务..." + : > "$WORKER_LOG" + ( + cd "$PROJECT_DIR" + exec "$WORKER_SCRIPT" + ) >> "$WORKER_LOG" 2>&1 & + pid=$! + echo "$pid" > "$WORKER_PID_FILE" + sleep 2 + + if pid_alive "$pid"; then + log_success "Worker 启动成功 (PID: $pid)" + return 0 + fi + + log_error "Worker 启动失败,查看日志: $WORKER_LOG" + tail -20 "$WORKER_LOG" 2>/dev/null || true + rm -f "$WORKER_PID_FILE" + return 1 +} + stop_service() { local name=$1 local pid_file=$2 @@ -233,11 +271,13 @@ do_start() { start_backend || return 1 start_frontend || return 1 + start_worker || return 1 echo "" echo -e "${GREEN}============================================${NC}" echo -e "${GREEN} 前端: http://localhost:$FRONTEND_PUBLIC_PORT (开发服务: $FRONTEND_DEV_PORT)${NC}" echo -e "${GREEN} 后端: http://localhost:$BACKEND_PORT${NC}" + echo -e "${GREEN} Worker: $WORKER_SCRIPT${NC}" echo -e "${GREEN} 日志目录: $LOG_DIR${NC}" echo -e "${GREEN}============================================${NC}" echo "" @@ -249,6 +289,7 @@ do_stop() { echo -e "${YELLOW} 停止 LeAudit 前后端${NC}" echo -e "${YELLOW}============================================${NC}" echo "" + stop_service "Worker" "$WORKER_PID_FILE" stop_service "前端" "$FRONTEND_PID_FILE" stop_service "后端" "$BACKEND_PID_FILE" echo "" @@ -263,6 +304,7 @@ do_restart() { do_status() { cleanup_pid_file "$BACKEND_PID_FILE" cleanup_pid_file "$FRONTEND_PID_FILE" + cleanup_pid_file "$WORKER_PID_FILE" echo "" echo -e "${CYAN}============================================${NC}" @@ -285,9 +327,17 @@ do_status() { echo -e " 前端: ${RED}○ 已停止${NC}" fi + pid=$(service_pid "$WORKER_PID_FILE") + if pid_alive "$pid"; then + echo -e " Worker: ${GREEN}● 运行中${NC} PID=$pid" + else + echo -e " Worker: ${RED}○ 已停止${NC}" + fi + echo "" echo " 后端日志: $BACKEND_LOG" echo " 前端日志: $FRONTEND_LOG" + echo " Worker日志: $WORKER_LOG" echo "" } @@ -310,24 +360,36 @@ do_logs() { echo -e "${CYAN}--- Ctrl+C 退出 ---${NC}" tail -f "$FRONTEND_LOG" ;; + worker) + [ -f "$WORKER_LOG" ] || touch "$WORKER_LOG" + echo -e "${CYAN}--- Worker 日志 (最近 $lines 行) ---${NC}" + tail -n "$lines" "$WORKER_LOG" + echo -e "${CYAN}--- Ctrl+C 退出 ---${NC}" + tail -f "$WORKER_LOG" + ;; all) [ -f "$BACKEND_LOG" ] || touch "$BACKEND_LOG" [ -f "$FRONTEND_LOG" ] || touch "$FRONTEND_LOG" + [ -f "$WORKER_LOG" ] || touch "$WORKER_LOG" echo -e "${CYAN}--- 后端日志 (最近 $lines 行) ---${NC}" tail -n "$lines" "$BACKEND_LOG" echo "" echo -e "${CYAN}--- 前端日志 (最近 $lines 行) ---${NC}" tail -n "$lines" "$FRONTEND_LOG" echo "" + echo -e "${CYAN}--- Worker 日志 (最近 $lines 行) ---${NC}" + tail -n "$lines" "$WORKER_LOG" + echo "" echo -e "${CYAN}--- Ctrl+C 退出 ---${NC}" - tail -n 0 -f "$BACKEND_LOG" "$FRONTEND_LOG" 2>/dev/null | awk ' + tail -n 0 -f "$BACKEND_LOG" "$FRONTEND_LOG" "$WORKER_LOG" 2>/dev/null | awk ' /^==> .*backend\.log <==$/ { current="[backend]"; next } /^==> .*frontend\.log <==$/ { current="[frontend]"; next } + /^==> .*worker\.log <==$/ { current="[worker]"; next } { print current " " $0; fflush() } ' ;; *) - echo "用法: ./leaudit.sh logs [backend|frontend|all] [行数]" + echo "用法: ./leaudit.sh logs [backend|frontend|worker|all] [行数]" exit 1 ;; esac @@ -369,6 +431,16 @@ do_doctor() { echo -e " 后端服务 $BACKEND_PORT: ${RED}○ 未监听${NC}" fi + local worker_pid + worker_pid=$(service_pid "$WORKER_PID_FILE") + if pid_alive "$worker_pid"; then + cmd="$(pid_command "$worker_pid")" + echo -e " Worker 进程: ${GREEN}● 运行中${NC} PID=$worker_pid" + [ -n "$cmd" ] && echo " 命令: $cmd" + else + echo -e " Worker 进程: ${RED}○ 未运行${NC}" + fi + echo "" } @@ -381,6 +453,7 @@ do_open() { echo " 前端访问: http://localhost:$FRONTEND_PUBLIC_PORT" echo " 前端开发: http://127.0.0.1:$FRONTEND_DEV_PORT" echo " 后端访问: http://localhost:$BACKEND_PORT" + echo " Worker脚本: $WORKER_SCRIPT" echo "" echo -e "${CYAN}--- 后端最近 5 行 ---${NC}" tail -n 5 "$BACKEND_LOG" 2>/dev/null || echo "(无后端日志)" @@ -388,6 +461,9 @@ do_open() { echo -e "${CYAN}--- 前端最近 5 行 ---${NC}" tail -n 5 "$FRONTEND_LOG" 2>/dev/null || echo "(无前端日志)" echo "" + echo -e "${CYAN}--- Worker最近 5 行 ---${NC}" + tail -n 5 "$WORKER_LOG" 2>/dev/null || echo "(无Worker日志)" + echo "" } case "${1:-help}" in @@ -423,6 +499,7 @@ case "${1:-help}" in echo " logs 查看前后端日志并持续跟踪" echo " logs backend 只看后端日志" echo " logs frontend 50 看前端最近 50 行日志并持续跟踪" + echo " logs worker 50 看 Worker 最近 50 行日志并持续跟踪" echo " doctor 检查 5173 / 5193 / 8096 端口占用情况" echo " open 打印访问地址和最近日志摘要" echo ""