在本教程中,我们将创建一个 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 命令编辑你的定时任务,并添加上述行。
608

被折叠的 条评论
为什么被折叠?



