3588AdminBackend/scripts/deploy/3588admin
2026-02-25 16:20:24 +08:00

810 lines
24 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"