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:
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user