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