feat: manage worker in leaudit script

This commit is contained in:
wren
2026-05-11 02:31:58 +08:00
parent 1a626a9020
commit 90e56d6259
+79 -2
View File
@@ -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 ""