feat(deploy): 目录自适应 + Celery 自动轮询接入 systemd

1. start.sh BASE_DIR 不再硬编码 /root/ipam,改为跟随脚本所在目录
   (BASH_SOURCE 自动检测),无论部署在 /opt /usr/local /root 等
   任意目录都能工作。
2. 运行 start.sh 时自动生成 3 个 systemd 单元并 enable 开机自启:
   - ipam-backend (uvicorn :8008)
   - ipam-celery-worker
   - ipam-celery-beat (每60秒触发SNMP设备自动轮询)
   均含 Restart=always 崩溃自动重启,日志写入 /var/log/ipam/。
3. 前端 vite dev server 保持 nohup 启动(不纳入 systemd)。
4. stop.sh 改为 systemctl stop 停止 systemd 服务,pkill 兜底。
5. .gitignore 忽略 celerybeat-schedule 运行期文件。
This commit is contained in:
Your Name
2026-08-12 11:05:18 +08:00
parent 5369d8d6e5
commit 18cefa6ded
3 changed files with 197 additions and 83 deletions
+37 -16
View File
@@ -1,5 +1,8 @@
#!/bin/bash
# IPAM 管理系统停止脚本
#
# 通过 systemd 停止后端与 Celery(若服务已接入 systemd),
# 并停止前端 dev server。
echo "=========================================="
echo " IPAM 管理系统停止脚本"
@@ -12,37 +15,52 @@ 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 ""
# 停止后端
echo "停止后端 API 服务..."
pkill -f "uvicorn app.main:app" 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 后端已停止${NC}"
# 停止 Celery Beat
echo "停止 Celery Beat..."
if systemctl stop $SYSTEMD_CELERY_BEAT 2>/dev/null; then
echo -e "${GREEN}✅ Celery Beat 已停止 (systemd)${NC}"
else
echo -e "${YELLOW}️ 后端未运行${NC}"
pkill -f "celery.*app.tasks.celery_app.*beat" 2>/dev/null
echo -e "${YELLOW}️ Celery Beat 已停止 (pkill 兜底)${NC}"
fi
# 停止 Celery
# 停止 Celery Worker
echo ""
echo "停止 Celery Worker..."
pkill -f "celery.*app.tasks.celery_app" 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ Celery Worker 已停止${NC}"
if systemctl stop $SYSTEMD_CELERY_WORKER 2>/dev/null; then
echo -e "${GREEN}✅ Celery Worker 已停止 (systemd)${NC}"
else
echo -e "${YELLOW}️ Celery Worker 未运行${NC}"
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
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ 前端服务已停止${NC}"
else
echo -e "${YELLOW}️ 前端服务未运行${NC}"
fi
echo -e "${GREEN}✅ 前端服务已停止${NC}"
echo ""
echo "=========================================="
@@ -52,3 +70,6 @@ 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 ""