在 OpenWrt 上使用 Bash 脚本进行阿里云网盘 WebDAV 备份

在本教程中,我们将创建一个 Bash 脚本,自动备份本地配置文件到 WebDAV 服务器。该脚本将使用 tar 压缩文件,并通过 curl 上传到 WebDAV 服务器。此外,它还将保留最近的备份,确保不会占用过多存储空间。

1、准备工作

确保你的 OpenWrt 系统已经安装了 curl 和 tar。你可以通过以下命令安装这些工具:

opkg update
opkg install curl tar

2、脚本代码

以下是备份脚本的完整代码示例。请根据你的具体需求调整相应的参数:

#!/bin/bash

# WebDAV 服务器信息
WEBDAV_URL="http://your-webdav-server-url/"
WEBDAV_USER="your-username"
WEBDAV_PASS="your-password"

# 备份目录路径
LOCAL_PATH="/data/Configs"
BACKUP_FILE="/data/$(date +'%Y%m%d_%H%M%S')_Configs_backup.tar.gz"

# 日志文件路径
LOG_FILE="/data/Configs/log/webdav_backup.log"

# 确保日志目录存在
mkdir -p "$(dirname "$LOG_FILE")"

# 记录开始备份时间
echo "$(date +'%Y-%m-%d %H:%M:%S') - 开始备份" >> $LOG_FILE
echo "$(date +'%Y-%m-%d %H:%M:%S') - 开始备份"

# 使用 tar 压缩文件
tar -cvzf "$BACKUP_FILE" -C "$(dirname "$LOCAL_PATH")" "$(basename "$LOCAL_PATH")" | tee /dev/stderr
if [ $? -ne 0 ]; then
    echo "$(date +'%Y-%m-%d %H:%M:%S') - 压缩失败" >> $LOG_FILE
    exit 1
fi
echo "$(date +'%Y-%m-%d %H:%M:%S') - 压缩完成" >> $LOG_FILE

# 上传压缩文件到 WebDAV
DEST_FILE="${WEBDAV_URL}/$(basename "$BACKUP_FILE")"
curl -u $WEBDAV_USER:$WEBDAV_PASS --progress-bar -T "$BACKUP_FILE" "$DEST_FILE"
echo "$(date +'%Y-%m-%d %H:%M:%S') - 上传完成" >> $LOG_FILE

# 删除本地压缩文件
rm -f "$BACKUP_FILE"

# 保留 WebDAV 上最近的 60 份备份
FILE_LIST=$(curl -u $WEBDAV_USER:$WEBDAV_PASS -s "$WEBDAV_URL" | grep 'href=".*.tar.gz"' | sed 's/.*href="([^"]*)".*//' | sort -r)
COUNT=0
for FILE in $FILE_LIST; do
    COUNT=$((COUNT + 1))
    if [ $COUNT -gt 60 ]; then
        curl -u $WEBDAV_USER:$WEBDAV_PASS -X DELETE "${WEBDAV_URL}/${FILE}"
        echo "$(date +'%Y-%m-%d %H:%M:%S') - 删除旧备份: $FILE" >> $LOG_FILE
    fi
done

# 记录备份完成时间
echo "$(date +'%Y-%m-%d %H:%M:%S') - 备份完成" >> $LOG_FILE

3、脚本功能说明

压缩文件:使用 tar 命令将指定的本地目录压缩为 .tar.gz 文件。
上传到 WebDAV:通过 curl 命令将压缩文件上传到指定的 WebDAV 服务器。
日志记录:脚本会记录每个操作的时间戳到日志文件中。
旧备份清理:脚本会检查并删除 WebDAV 上的旧备份文件,只保留最近的 60 个备份。

4、使用方法

将上述代码复制到一个新的 .sh 文件中,例如 webdav_backup.sh。
修改脚本中的 WebDAV 服务器信息和本地路径。
给予脚本执行权限:

chmod +x webdav_backup.sh

通过命令行运行脚本,或者将其添加到定时任务中实现定期备份。

5、设置定时任务

为了实现自动备份,我们可以使用 cron 定时任务。以下是添加定时任务的命令,它会每天凌晨 2 点执行备份脚本:

0 2 * * * /data/Configs/rc/backup_to_webdav.sh # 每天2点执行备份docker配置文件

使用 crontab -e 命令编辑你的定时任务,并添加上述行。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值