AlexRomeo
发布于 2025-02-28 / 35 阅读
0
0

ADGUARD更新脚本

ADGUARD更新脚本

一般情况下可以直接使用adguard的web页面直接进行更新,出现更新失败时,可选择使用脚本的方式进行。但需要注意脚本中的路径问题。

#!/bin/bash

# 检查是否提供了URL参数
if [ -z "$1" ]; then
  echo "使用方法: $0 <下载地址>"
  exit 1
fi

DOWNLOAD_URL=$1
PACKAGE_PATH="/opt/software"
PACKAGE_NAME="AdGuardHome_linux_amd64.tar.gz" 
SERVICE_NAME="AdGuardHome" # 假设服务名为adguard,请根据实际情况修改
BACKUP_DIR="adg_Backup"
CURRENT_TIME=$(date +%Y%m%d%H%M%S) # 当前时间格式化为年月日时分秒

echo "开始更新${SERVICE_NAME}..."

# 创建备份目录(如果不存在)
mkdir -p $PACKAGE_PATH/$BACKUP_DIR

# 如果存在旧的更新包,则按照当前时间备份
if [ -f "$PACKAGE_PATH/$PACKAGE_NAME" ]; then
  BACKUP_PACKAGE="$PACKAGE_PATH/${BACKUP_DIR}/${PACKAGE_NAME}${CURRENT_TIME}.bak"
  echo "发现并备份旧的更新包到 $BACKUP_PACKAGE..."
  mv $PACKAGE_PATH/$PACKAGE_NAME $BACKUP_PACKAGE
fi

# 检测操作系统类型
if [ -f "/etc/os-release" ]; then
  . /etc/os-release
  OS_NAME=$ID
else
  echo "无法识别操作系统"
  exit 1
fi

# 根据不同的操作系统选择停止服务的命令
case $OS_NAME in
  "centos"|"rhel")
    STOP_CMD="systemctl stop $SERVICE_NAME"
    START_CMD="systemctl start $SERVICE_NAME"
    ;;
  "ubuntu"|"debian")
    STOP_CMD="systemctl stop $SERVICE_NAME"
    START_CMD="systemctl start $SERVICE_NAME"
    ;;
  "alpine")
    STOP_CMD="rc-service $SERVICE_NAME stop"
    START_CMD="rc-service $SERVICE_NAME start"
    ;;
  *)
    echo "不支持的操作系统:$OS_NAME"
    exit 1
esac

# 停止服务
echo "执行停止命令: $STOP_CMD"
$STOP_CMD
if [ $? -ne 0 ]; then
  echo "停止服务失败!"
  exit 1
fi

# 下载更新包
echo "正在从 ${DOWNLOAD_URL} 下载更新包..."
wget -O $PACKAGE_PATH/$PACKAGE_NAME $DOWNLOAD_URL
if [ $? -ne 0 ]; then
  echo "下载失败!尝试重新启动${SERVICE_NAME}服务..."
  if [ -f "$PACKAGE_PATH/$PACKAGE_NAME" ]; then
    rm $PACKAGE_PATH/$PACKAGE_NAME
  fi
  $START_CMD
  exit 1
fi

# 解压缩覆盖
echo "解压更新包..."
tar -xzf $PACKAGE_PATH/$PACKAGE_NAME -C $PACKAGE_PATH
if [ $? -ne 0 ]; then
  echo "解压失败!尝试恢复旧版本并重新启动${SERVICE_NAME}服务..."
  if [ -f "$BACKUP_PACKAGE" ]; then
    tar -xzf $BACKUP_PACKAGE -C $PACKAGE_PATH
  else
    echo "备份文件不存在,无法恢复旧版本!"
  fi
  $START_CMD
  exit 1
fi

# 启动服务
echo "执行启动命令: $START_CMD"
$START_CMD
if [ $? -eq 0 ]; then
  echo "更新完成并已重启服务。"
else
  echo "服务启动失败!尝试恢复旧版本并重新启动${SERVICE_NAME}服务..."
  if [ -f "$BACKUP_PACKAGE" ]; then
    tar -xzf $BACKUP_PACKAGE -C $PACKAGE_PATH
  else
    echo "备份文件不存在,无法恢复旧版本!"
  fi
  $START_CMD
  exit 1
fi

echo "更新成功,旧版本已经备份至 $BACKUP_PACKAGE"

脚本使用示例:

sh update_adguardhome.sh https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.57/AdGuardHome_linux_amd64.tar.gz

评论