简化部署脚本和文档

This commit is contained in:
tian 2026-02-25 16:20:24 +08:00
parent cda9702548
commit 7e6e00f17e

809
scripts/deploy/3588admin Executable file
View File

@ -0,0 +1,809 @@
#!/bin/bash
# 3588AdminBackend 统一管理脚本
# 提供安装、状态、升级、卸载等功能
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 配置
APP_NAME="managerd"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DEFAULT_INSTALL_DIR="/opt/3588admin"
INSTALL_DIR="${DEFAULT_INSTALL_DIR}"
PID_FILE="$INSTALL_DIR/$APP_NAME.pid"
# 显示帮助
cmd_help() {
cat << EOF
3588AdminBackend 管理脚本
用法: $0 <命令> [选项]
命令:
install [目录] 安装服务 (默认: /opt/3588admin)
status 查看服务状态
start 启动服务
stop 停止服务
restart 重启服务
upgrade [目录] 升级服务 (保留配置)
uninstall [目录] 卸载服务 (自动备份配置)
check 检查环境是否满足运行要求
help 显示此帮助信息
示例:
$0 install # 安装到默认目录
$0 install /usr/local/3588 # 安装到指定目录
$0 status # 查看服务状态
$0 upgrade # 升级到当前目录下的新版本
$0 uninstall # 卸载并备份配置
$0 check # 检查系统环境
快捷命令 (安装后可用):
3588admin-start 启动服务
3588admin-stop 停止服务
3588admin-status 查看状态
EOF
}
# 检查 root 权限
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 请使用 sudo 运行此命令${NC}"
exit 1
fi
}
# 获取安装目录
get_install_dir() {
if [ -n "$1" ]; then
INSTALL_DIR="$1"
fi
PID_FILE="$INSTALL_DIR/$APP_NAME.pid"
}
# 环境检查
cmd_check() {
echo "========== 3588AdminBackend 环境检查 =========="
echo ""
PASS=0
FAIL=0
WARN=0
check_pass() {
echo -e "${GREEN}✓${NC} $1"
((PASS++))
}
check_fail() {
echo -e "${RED}✗${NC} $1"
((FAIL++))
}
check_warn() {
echo -e "${YELLOW}⚠${NC} $1"
((WARN++))
}
# 1. 检查操作系统
echo "[系统信息]"
echo " 主机名: $(hostname)"
if [ -f /etc/os-release ]; then
. /etc/os-release
echo " 操作系统: $NAME $VERSION"
if [[ "$NAME" == *"Ubuntu"* ]] && [[ "$VERSION_ID" == "22.04" ]]; then
check_pass "Ubuntu 22.04 detected"
else
check_warn "非 Ubuntu 22.04,可能兼容但未经测试"
fi
else
check_warn "无法检测操作系统版本"
fi
# 2. 检查架构
echo ""
echo "[硬件信息]"
ARCH=$(uname -m)
echo " 架构: $ARCH"
if [ "$ARCH" = "x86_64" ]; then
check_pass "x86_64 架构"
elif [ "$ARCH" = "aarch64" ]; then
check_warn "ARM64 架构,请使用 ARM64 版本二进制"
else
check_warn "未知架构: $ARCH"
fi
echo " CPU: $(nproc) 核"
echo " 内存: $(free -h | awk '/^Mem:/ {print $2}')"
# 3. 检查网络工具
echo ""
echo "[网络工具]"
if command -v curl >/dev/null 2>&1; then
check_pass "curl 已安装"
else
check_warn "curl 未安装"
fi
if command -v netstat >/dev/null 2>&1 || command -v ss >/dev/null 2>&1; then
check_pass "网络工具(netstat/ss)已安装"
else
check_warn "建议安装 net-tools 或 iproute2"
fi
# 4. 检查端口占用
echo ""
echo "[端口检查]"
PORT_18080=false
PORT_35688=false
if command -v ss >/dev/null 2>&1; then
PORT_18080=$(ss -tln 2>/dev/null | grep -q ':18080 ' && echo true || echo false)
PORT_35688=$(ss -uln 2>/dev/null | grep -q ':35688 ' && echo true || echo false)
elif command -v netstat >/dev/null 2>&1; then
PORT_18080=$(netstat -tln 2>/dev/null | grep -q ':18080 ' && echo true || echo false)
PORT_35688=$(netstat -uln 2>/dev/null | grep -q ':35688 ' && echo true || echo false)
fi
if [ "$PORT_18080" = true ]; then
check_warn "端口 18080 已被占用"
else
check_pass "端口 18080 可用"
fi
if [ "$PORT_35688" = true ]; then
check_warn "端口 35688 已被占用"
else
check_pass "端口 35688 可用"
fi
# 5. 检查防火墙
echo ""
echo "[防火墙]"
if command -v ufw >/dev/null 2>&1; then
UFW_STATUS=$(ufw status 2>/dev/null | grep -i status | awk '{print $2}')
echo " UFW 状态: $UFW_STATUS"
elif command -v firewall-cmd >/dev/null 2>&1; then
check_warn "检测到 firewalld请手动配置端口"
else
echo " 未检测到防火墙"
fi
# 6. 检查磁盘空间
echo ""
echo "[磁盘空间]"
DISK_AVAIL=$(df -BG /opt 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G')
if [ -z "$DISK_AVAIL" ]; then
DISK_AVAIL=$(df -BG / 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G')
fi
if [ -n "$DISK_AVAIL" ] && [ "$DISK_AVAIL" -ge 1 ]; then
check_pass "磁盘空间充足 (${DISK_AVAIL}G 可用)"
else
check_warn "磁盘空间不足 (${DISK_AVAIL:-0}G 可用,建议至少 1GB)"
fi
# 7. 检查权限
echo ""
echo "[权限检查]"
if [ "$EUID" -eq 0 ]; then
check_pass "当前为 root 用户"
else
check_warn "当前非 root 用户,安装需要 root 权限"
fi
# 8. 检查 Python
echo ""
echo "[其他工具]"
if command -v python3 >/dev/null 2>&1; then
check_pass "Python3 已安装 ($(python3 --version))"
else
check_warn "Python3 未安装 (用于配置验证)"
fi
# 总结
echo ""
echo "========== 检查总结 =========="
echo -e "通过: ${GREEN}$PASS${NC} 警告: ${YELLOW}$WARN${NC} 失败: ${RED}$FAIL${NC}"
echo ""
if [ $FAIL -gt 0 ]; then
echo -e "${RED}环境检查未通过,请解决上述问题后再安装${NC}"
exit 1
elif [ $WARN -gt 0 ]; then
echo -e "${YELLOW}环境基本满足,但有一些警告需要注意${NC}"
return 0
else
echo -e "${GREEN}环境检查全部通过,可以安装${NC}"
return 0
fi
}
# 安装
cmd_install() {
check_root
get_install_dir "$1"
local CURRENT_DIR="$SCRIPT_DIR"
local BASE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "========== 3588AdminBackend 离线安装 =========="
echo "安装目录: $INSTALL_DIR"
echo ""
# 检查安装目录
if [ -d "$INSTALL_DIR" ] && [ "$(ls -A $INSTALL_DIR 2>/dev/null)" ]; then
echo -e "${YELLOW}警告: 安装目录 $INSTALL_DIR 已存在且不为空${NC}"
read -p "是否覆盖? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "安装已取消"
exit 1
fi
# 备份现有配置
if [ -f "$INSTALL_DIR/config/managerd.json" ]; then
local BACKUP_FILE="$INSTALL_DIR/config/managerd.json.bak.$(date +%Y%m%d%H%M%S)"
echo "备份现有配置到: $BACKUP_FILE"
cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_FILE"
fi
fi
# 1. 安装依赖包
if [ -d "$BASE_DIR/deps" ] && [ "$(ls -A $BASE_DIR/deps/*.deb 2>/dev/null)" ]; then
echo "[1/5] 安装依赖包..."
cd "$BASE_DIR/deps"
for pkg in *.deb; do
echo " 安装: $pkg"
dpkg -i "$pkg" 2>/dev/null || true
done
apt-get install -f -y 2>/dev/null || true
else
echo "[1/5] 跳过依赖包安装 (无依赖包)"
fi
# 2. 创建安装目录
echo "[2/5] 创建安装目录..."
mkdir -p "$INSTALL_DIR"
echo " 复制二进制文件..."
mkdir -p "$INSTALL_DIR/bin"
cp "$BASE_DIR/bin/managerd" "$INSTALL_DIR/bin/" 2>/dev/null || {
echo -e "${RED}错误: 未找到 managerd 二进制文件${NC}"
echo "请确保在打包前已编译"
exit 1
}
echo " 复制配置文件..."
mkdir -p "$INSTALL_DIR/config"
if [ -f "$BASE_DIR/config/managerd.json" ]; then
cp "$BASE_DIR/config/managerd.json" "$INSTALL_DIR/config/"
elif [ -f "$BASE_DIR/config/managerd.json.example" ]; then
cp "$BASE_DIR/config/managerd.json.example" "$INSTALL_DIR/config/"
fi
# 复制模板文件
if [ -d "$BASE_DIR/templates" ]; then
echo " 复制模板文件..."
cp -r "$BASE_DIR/templates" "$INSTALL_DIR/"
fi
# 3. 设置权限
echo "[3/5] 设置权限..."
chmod +x "$INSTALL_DIR/bin/managerd"
mkdir -p "$INSTALL_DIR/logs"
chmod 755 "$INSTALL_DIR/logs"
# 4. 初始化配置文件
echo "[4/5] 初始化配置文件..."
if [ ! -f "$INSTALL_DIR/config/managerd.json" ]; then
cat > "$INSTALL_DIR/config/managerd.json" << 'EOF'
{
"listen": "127.0.0.1:18080",
"discovery_port": 35688,
"discovery_timeout_ms": 1200,
"offline_after_ms": 10000,
"agent_token": "CHANGE_ME",
"concurrency": 5
}
EOF
echo -e " ${GREEN}已创建默认配置文件${NC}"
echo -e " ${YELLOW}⚠️ 请编辑 $INSTALL_DIR/config/managerd.json 修改配置(特别是 agent_token${NC}"
else
echo " 配置文件已存在,保留现有配置"
fi
# 5. 复制管理脚本
echo "[5/5] 安装管理脚本..."
mkdir -p "$INSTALL_DIR/scripts"
cp "$CURRENT_DIR/3588admin" "$INSTALL_DIR/scripts/"
chmod +x "$INSTALL_DIR/scripts/3588admin"
# 创建快捷方式
ln -sf "$INSTALL_DIR/scripts/3588admin" /usr/local/bin/3588admin-start 2>/dev/null || true
ln -sf "$INSTALL_DIR/scripts/3588admin" /usr/local/bin/3588admin-stop 2>/dev/null || true
ln -sf "$INSTALL_DIR/scripts/3588admin" /usr/local/bin/3588admin-status 2>/dev/null || true
ln -sf "$INSTALL_DIR/scripts/3588admin" /usr/local/bin/3588admin 2>/dev/null || true
# 安装 Systemd 服务
if [ -f "$CURRENT_DIR/3588admin.service" ]; then
echo "[可选] 安装 Systemd 服务..."
cp "$CURRENT_DIR/3588admin.service" /etc/systemd/system/
sed -i "s|/opt/3588admin|$INSTALL_DIR|g" /etc/systemd/system/3588admin.service
systemctl daemon-reload
echo " 已安装 Systemd 服务"
fi
echo ""
echo -e "${GREEN}========== 安装完成 ==========${NC}"
echo "安装目录: $INSTALL_DIR"
echo ""
echo "使用命令:"
echo " 3588admin start - 启动服务"
echo " 3588admin stop - 停止服务"
echo " 3588admin status - 查看状态"
echo " 3588admin restart - 重启服务"
echo " 3588admin upgrade - 升级服务"
echo " 3588admin uninstall - 卸载服务"
echo ""
echo -e "${YELLOW}重要提示:${NC}"
echo " 1. 请先编辑配置文件: $INSTALL_DIR/config/managerd.json"
echo " 2. 务必修改 agent_token 为安全的随机字符串"
echo " 3. 如需监听外部地址,修改 listen 配置项"
echo " 4. 确保防火墙开放 discovery_port (默认 35688/UDP)"
}
# 启动服务
cmd_start() {
get_install_dir "$1"
local BIN_PATH="$INSTALL_DIR/bin/$APP_NAME"
local CONFIG_PATH="$INSTALL_DIR/config/managerd.json"
local LOG_DIR="$INSTALL_DIR/logs"
echo "========== 启动 3588AdminBackend =========="
echo "应用目录: $INSTALL_DIR"
echo "配置文件: $CONFIG_PATH"
echo ""
# 检查二进制文件
if [ ! -f "$BIN_PATH" ]; then
echo -e "${RED}错误: 未找到二进制文件: $BIN_PATH${NC}"
exit 1
fi
# 检查配置文件
if [ ! -f "$CONFIG_PATH" ]; then
echo -e "${RED}错误: 配置文件不存在: $CONFIG_PATH${NC}"
exit 1
fi
# 验证 JSON 格式
if command -v python3 &> /dev/null; then
if ! python3 -m json.tool "$CONFIG_PATH" > /dev/null 2>&1; then
echo -e "${RED}错误: 配置文件 JSON 格式不正确${NC}"
exit 1
fi
fi
# 创建日志目录
mkdir -p "$LOG_DIR"
# 检查是否已在运行
if [ -f "$PID_FILE" ]; then
local PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo -e "${YELLOW}警告: $APP_NAME 已在运行 (PID: $PID)${NC}"
exit 1
else
rm -f "$PID_FILE"
fi
fi
# 启动服务
echo "正在启动 $APP_NAME..."
nohup "$BIN_PATH" -config "$CONFIG_PATH" >> "$LOG_DIR/$APP_NAME.log" 2>&1 &
local PID=$!
echo $PID > "$PID_FILE"
# 等待启动
sleep 2
if ps -p "$PID" > /dev/null 2>&1; then
echo ""
echo -e "${GREEN}✅ 启动成功!${NC}"
echo " PID: $PID"
echo " 日志: $LOG_DIR/$APP_NAME.log"
echo ""
echo "查看日志: tail -f $LOG_DIR/$APP_NAME.log"
else
echo ""
echo -e "${RED}❌ 启动失败${NC}"
rm -f "$PID_FILE"
exit 1
fi
}
# 停止服务
cmd_stop() {
get_install_dir "$1"
echo "========== 停止 3588AdminBackend =========="
if [ -f "$PID_FILE" ]; then
local PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "正在停止 $APP_NAME (PID: $PID)..."
kill "$PID"
echo -n "等待进程结束"
for i in {1..10}; do
if ! ps -p "$PID" > /dev/null 2>&1; then
echo ""
echo -e "${GREEN}✅ 已停止${NC}"
rm -f "$PID_FILE"
return 0
fi
echo -n "."
sleep 1
done
echo ""
echo "强制结束进程..."
kill -9 "$PID" 2>/dev/null || true
rm -f "$PID_FILE"
echo -e "${GREEN}✅ 已强制停止${NC}"
else
echo -e "${YELLOW} 进程不存在 (PID: $PID)${NC}"
rm -f "$PID_FILE"
fi
else
# 尝试查找进程
local PID=$(pgrep -f "^$INSTALL_DIR/bin/$APP_NAME" | head -1)
if [ -n "$PID" ]; then
echo "发现运行中的进程 (PID: $PID),尝试停止..."
kill "$PID" 2>/dev/null || true
sleep 2
if ! ps -p "$PID" > /dev/null 2>&1; then
echo -e "${GREEN}✅ 已停止${NC}"
else
kill -9 "$PID" 2>/dev/null || true
echo -e "${GREEN}✅ 已强制停止${NC}"
fi
else
echo -e "${YELLOW} $APP_NAME 未在运行${NC}"
fi
fi
}
# 重启服务
cmd_restart() {
cmd_stop "$@"
sleep 1
cmd_start "$@"
}
# 查看状态
cmd_status() {
get_install_dir "$1"
local BIN_PATH="$INSTALL_DIR/bin/$APP_NAME"
local CONFIG_PATH="$INSTALL_DIR/config/managerd.json"
local LOG_DIR="$INSTALL_DIR/logs"
echo "========== 3588AdminBackend 状态 =========="
echo ""
echo "基本信息:"
echo " 应用目录: $INSTALL_DIR"
echo " 二进制文件: $BIN_PATH"
echo " 配置文件: $CONFIG_PATH"
echo " 日志目录: $LOG_DIR"
# 检查二进制文件
if [ -f "$BIN_PATH" ]; then
echo -e " 二进制状态: ${GREEN}✅ 存在${NC}"
else
echo -e " 二进制状态: ${RED}❌ 不存在${NC}"
fi
# 检查配置文件
if [ -f "$CONFIG_PATH" ]; then
echo -e " 配置文件: ${GREEN}✅ 存在${NC}"
if command -v python3 &> /dev/null; then
local LISTEN=$(python3 -c "import json; print(json.load(open('$CONFIG_PATH')).get('listen', 'N/A'))" 2>/dev/null)
local DISCOVERY_PORT=$(python3 -c "import json; print(json.load(open('$CONFIG_PATH')).get('discovery_port', 'N/A'))" 2>/dev/null)
echo " 监听地址: $LISTEN"
echo " 发现端口: $DISCOVERY_PORT (UDP)"
fi
else
echo -e " 配置文件: ${RED}❌ 不存在${NC}"
fi
echo ""
echo "运行状态:"
# 检查进程
if [ -f "$PID_FILE" ]; then
local PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo -e " 进程状态: ${GREEN}🟢 运行中${NC}"
echo " PID: $PID"
if command -v ps &> /dev/null; then
echo ""
echo "进程详情:"
ps -p "$PID" -o pid,pcpu,pmem,cmd --no-headers 2>/dev/null | while read line; do
echo " $line"
done
fi
echo ""
echo "网络监听:"
if command -v ss &> /dev/null; then
ss -tlnp 2>/dev/null | grep "$PID" | head -3 | while read line; do
echo " $line"
done
elif command -v netstat &> /dev/null; then
netstat -tlnp 2>/dev/null | grep "$PID/" | head -3 | while read line; do
echo " $line"
done
fi
# API 测试
if command -v curl &> /dev/null; then
echo ""
echo "API 测试:"
local HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:18080/api/devices" 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "401" ]; then
echo -e " ${GREEN}✅ HTTP API 响应正常 (HTTP $HTTP_CODE)${NC}"
elif [ "$HTTP_CODE" = "000" ]; then
echo -e " ${YELLOW}⚠️ 无法连接 HTTP API${NC}"
else
echo " HTTP API 响应: $HTTP_CODE"
fi
fi
else
echo -e " 进程状态: ${RED}🔴 未运行 (PID 文件存在但进程不存在)${NC}"
fi
else
local PID=$(pgrep -f "^$BIN_PATH" | head -1)
if [ -n "$PID" ]; then
echo -e " 进程状态: ${YELLOW}🟡 运行中 (无 PID 文件PID: $PID)${NC}"
else
echo -e " 进程状态: ${BLUE}⚫ 未运行${NC}"
fi
fi
# 日志信息
echo ""
echo "日志信息:"
if [ -d "$LOG_DIR" ]; then
local NEWEST_LOG=$(ls -t "$LOG_DIR"/*.log 2>/dev/null | head -1)
if [ -n "$NEWEST_LOG" ]; then
echo " 最新日志 ($NEWEST_LOG):"
tail -n 3 "$NEWEST_LOG" | while read line; do
echo " $line"
done
else
echo " 无日志文件"
fi
else
echo " 日志目录不存在"
fi
}
# 升级服务
cmd_upgrade() {
check_root
get_install_dir "$1"
local SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
local BACKUP_DIR="/root/3588admin-backup-$(date +%Y%m%d%H%M%S)"
echo "========== 3588AdminBackend 升级 =========="
echo "安装目录: $INSTALL_DIR"
echo "备份目录: $BACKUP_DIR"
echo ""
# 检查安装目录是否存在
if [ ! -d "$INSTALL_DIR" ]; then
echo -e "${RED}错误: 安装目录不存在: $INSTALL_DIR${NC}"
echo "请先运行安装命令"
exit 1
fi
# 确认
read -p "确定要升级 3588AdminBackend? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "升级已取消"
exit 0
fi
# 1. 停止服务
echo "[1/5] 停止服务..."
cmd_stop "$@" 2>/dev/null || true
sleep 2
# 2. 备份
echo "[2/5] 备份现有数据..."
mkdir -p "$BACKUP_DIR"
if [ -f "$INSTALL_DIR/config/managerd.json" ]; then
cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_DIR/"
echo " 已备份配置文件"
fi
if [ -d "$INSTALL_DIR/logs" ]; then
cp -r "$INSTALL_DIR/logs" "$BACKUP_DIR/"
echo " 已备份日志文件"
fi
if [ -f "$INSTALL_DIR/bin/managerd" ]; then
cp "$INSTALL_DIR/bin/managerd" "$BACKUP_DIR/managerd.old"
echo " 已备份旧版本二进制"
fi
# 3. 更新二进制文件
echo "[3/5] 更新二进制文件..."
local BASE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
if [ -f "$BASE_DIR/bin/managerd" ]; then
cp "$BASE_DIR/bin/managerd" "$INSTALL_DIR/bin/managerd"
chmod +x "$INSTALL_DIR/bin/managerd"
echo -e " ${GREEN}已更新二进制文件${NC}"
else
echo -e "${YELLOW}警告: 未找到新的二进制文件${NC}"
fi
# 4. 更新脚本
echo "[4/5] 更新脚本..."
cp "$SCRIPT_DIR/3588admin" "$INSTALL_DIR/scripts/"
chmod +x "$INSTALL_DIR/scripts/3588admin"
echo " 已更新管理脚本"
# 5. 启动服务
echo "[5/5] 启动服务..."
cmd_start "$@"
echo ""
echo -e "${GREEN}========== 升级完成 ==========${NC}"
echo "备份位置: $BACKUP_DIR"
}
# 卸载服务
cmd_uninstall() {
check_root
get_install_dir "$1"
echo "========== 3588AdminBackend 卸载 =========="
echo "安装目录: $INSTALL_DIR"
echo ""
# 确认
read -p "确定要完全卸载 3588AdminBackend? 此操作不可恢复! (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "卸载已取消"
exit 0
fi
# 1. 停止服务
echo "[1/4] 停止服务..."
cmd_stop "$@" 2>/dev/null || true
# 停止 systemd 服务
if systemctl is-active --quiet 3588admin 2>/dev/null; then
systemctl stop 3588admin
fi
if systemctl is-enabled --quiet 3588admin 2>/dev/null; then
systemctl disable 3588admin
fi
# 2. 删除 systemd 服务文件
echo "[2/4] 删除 Systemd 服务..."
if [ -f "/etc/systemd/system/3588admin.service" ]; then
rm -f "/etc/systemd/system/3588admin.service"
systemctl daemon-reload
echo " 已删除 systemd 服务"
fi
# 3. 删除快捷方式
echo "[3/4] 删除快捷方式..."
rm -f /usr/local/bin/3588admin-start
rm -f /usr/local/bin/3588admin-stop
rm -f /usr/local/bin/3588admin-status
rm -f /usr/local/bin/3588admin
echo " 已删除命令快捷方式"
# 4. 备份并删除安装目录
echo "[4/4] 删除安装文件..."
local BACKUP_DIR=""
if [ -d "$INSTALL_DIR" ]; then
if [ -f "$INSTALL_DIR/config/managerd.json" ]; then
BACKUP_DIR="/root/3588admin-backup-$(date +%Y%m%d%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp "$INSTALL_DIR/config/managerd.json" "$BACKUP_DIR/"
echo " 配置已备份到: $BACKUP_DIR/"
fi
rm -rf "$INSTALL_DIR"
echo " 已删除安装目录: $INSTALL_DIR"
fi
echo ""
echo -e "${GREEN}========== 卸载完成 ==========${NC}"
if [ -n "$BACKUP_DIR" ]; then
echo "配置文件备份: $BACKUP_DIR/managerd.json"
fi
}
# 主函数
main() {
# 如果没有参数,显示帮助
if [ $# -eq 0 ]; then
cmd_help
exit 0
fi
# 解析命令
COMMAND="$1"
shift
case "$COMMAND" in
install)
cmd_install "$@"
;;
status)
cmd_status "$@"
;;
start)
cmd_start "$@"
;;
stop)
cmd_stop "$@"
;;
restart)
cmd_restart "$@"
;;
upgrade)
cmd_upgrade "$@"
;;
uninstall)
cmd_uninstall "$@"
;;
check)
cmd_check "$@"
;;
help|--help|-h)
cmd_help
;;
*)
# 兼容快捷方式调用
# 如果是通过快捷方式调用,脚本名就是命令
SCRIPT_NAME=$(basename "$0")
case "$SCRIPT_NAME" in
3588admin-start)
cmd_start "$@"
;;
3588admin-stop)
cmd_stop "$@"
;;
3588admin-status)
cmd_status "$@"
;;
*)
echo -e "${RED}错误: 未知命令 '$COMMAND'${NC}"
echo ""
cmd_help
exit 1
;;
esac
;;
esac
}
main "$@"