#!/bin/bash # IPAM 管理系统停止脚本 # # 通过 systemd 停止后端与 Celery(若服务已接入 systemd), # 并停止前端 dev server。 echo "==========================================" echo " IPAM 管理系统停止脚本" echo "==========================================" echo "" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 目录自适应(跟随本脚本所在目录) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BASE_DIR="$SCRIPT_DIR" # systemd 服务名(与 start.sh 保持一致) SYSTEMD_BACKEND="ipam-backend" SYSTEMD_CELERY_WORKER="ipam-celery-worker" SYSTEMD_CELERY_BEAT="ipam-celery-beat" echo "🛑 正在停止所有服务..." echo "" # 停止 Celery Beat echo "停止 Celery Beat..." if systemctl stop $SYSTEMD_CELERY_BEAT 2>/dev/null; then echo -e "${GREEN}✅ Celery Beat 已停止 (systemd)${NC}" else pkill -f "celery.*app.tasks.celery_app.*beat" 2>/dev/null echo -e "${YELLOW}ℹ️ Celery Beat 已停止 (pkill 兜底)${NC}" fi # 停止 Celery Worker echo "" echo "停止 Celery Worker..." if systemctl stop $SYSTEMD_CELERY_WORKER 2>/dev/null; then echo -e "${GREEN}✅ Celery Worker 已停止 (systemd)${NC}" else pkill -f "celery.*app.tasks.celery_app" 2>/dev/null echo -e "${YELLOW}ℹ️ Celery Worker 已停止 (pkill 兜底)${NC}" fi # 停止后端 echo "" echo "停止后端 API 服务..." if systemctl stop $SYSTEMD_BACKEND 2>/dev/null; then echo -e "${GREEN}✅ 后端已停止 (systemd)${NC}" else pkill -f "uvicorn app.main:app" 2>/dev/null echo -e "${YELLOW}ℹ️ 后端已停止 (pkill 兜底)${NC}" fi # 停止前端 echo "" echo "停止前端服务..." pkill -f "vite" 2>/dev/null echo -e "${GREEN}✅ 前端服务已停止${NC}" echo "" echo "==========================================" echo " 所有服务已停止" echo "==========================================" echo "" echo "📋 剩余进程检查:" ps aux | grep -E "(uvicorn|celery|vite)" | grep -v grep | awk '{print $2, $11}' echo "" echo "💡 若希望永久停止开机自启,可执行:" echo " systemctl disable $SYSTEMD_BACKEND $SYSTEMD_CELERY_WORKER $SYSTEMD_CELERY_BEAT" echo ""