服务器文件定时备份到阿里云盘(可多服务器)

我不知道有没有那种多服务器备份的已有项目或软件。(有的话大佬bb我)
因为服务器多,我不想每个都装备份软件。就直接用Alist+阿里云盘来备份了。

你需要找一个安装Alist的服务器,只需要这个服务器有Alist即可。
首先去docker安装Alist:使用 Docker | AList文档
进入Alist后添加存储。选择阿里云盘open
阿里云盘 Open | AList文档

挂载路径写

然后往下滑


云盘类型选:备份盘
刷新令牌去这里获取:Get Aliyundrive Refresh Token | AList Docs
我没提到的尽量别改。

最后就是脚本了

#!/bin/bash

# 获取用户输入的服务器备份名称
read -p "请输入服务器备份名称: " server_backup_name

# 确保用户输入了至少一个备份路径
while :; do
    echo "请输入要备份的文件目录(绝对路径),一行一个,回车结束:"
    while IFS= read -r line; do
        [[ -z "$line" ]] && break # 如果是空行则结束循环
        source_dirs+=("$line") # 将输入的路径添加到数组中
    done
    if [ ${#source_dirs[@]} -eq 0 ]; then
        echo "错误:必须设置至少一个备份路径。"
    else
        break
    fi
done

# 确保用户输入了定时时间
while :; do
    read -p "请输入自定义的cron时间格式(例如,每天凌晨2点为 0 2 * * *): " custom_cron_time
    if [[ -z "$custom_cron_time" ]]; then
        echo "错误:必须设置定时时间。"
    else
        break
    fi
done

# 设置WebDAV相关变量
WEBDAV_URL="http://127.0.0.1:5244/dav/阿里云盘/${server_backup_name}/"  #我自己的地址是  http://127.0.0.1:5244/dav/阿里云盘/
WEBDAV_USER="Alist账户"
WEBDAV_PASSWORD="Alist密码"

# 创建备份脚本
backup_script="/root/${server_backup_name}备份到webdav.sh"
cat << 'EOF' > "$backup_script"
#!/bin/bash

# 定义WebDAV相关变量
WEBDAV_URL="${WEBDAV_URL}"
WEBDAV_USER="${WEBDAV_USER}"
WEBDAV_PASSWORD="${WEBDAV_PASSWORD}"

EOF

# 为每个目录追加备份命令到脚本
for source_dir in "${source_dirs[@]}"; do
    DIR_NAME=$(basename "$source_dir")
    cat << EOF >> "$backup_script"
# 动态生成备份文件名,包含当前日期和时间
BACKUP_NAME="${DIR_NAME}-\$(date +%Y-%m-%d_%H-%M-%S).tar.gz"
BACKUP_PATH="/tmp/\$BACKUP_NAME"

# 压缩指定目录
tar -czf "\$BACKUP_PATH" "$source_dir"

# 上传到WebDAV
curl -T "\$BACKUP_PATH" -u \$WEBDAV_USER:\$WEBDAV_PASSWORD \$WEBDAV_URL

# 清理本地备份文件
rm "\$BACKUP_PATH"

EOF
done

# 替换变量占位符
sed -i "s|\${WEBDAV_URL}|$WEBDAV_URL|g" "$backup_script"
sed -i "s|\${WEBDAV_USER}|$WEBDAV_USER|g" "$backup_script"
sed -i "s|\${WEBDAV_PASSWORD}|$WEBDAV_PASSWORD|g" "$backup_script"

# 赋予执行权限
chmod +x "$backup_script"

# 设置cron作业
(crontab -l 2>/dev/null; echo "$custom_cron_time $backup_script") | crontab -

# 输出信息
echo "备份任务已设置,以下是所有信息。"
echo "需要备份路径: ${source_dirs[*]}"
echo "备份脚本路径: $backup_script"
echo "定时规则: $custom_cron_time"

最后将脚本127.0.0.1改成你的Alist服务器ip即可。
脚本运行效果:


此时会生成一个备份脚本到你的/root目录
同时定时规则也加入到 crontab

我们可以手动运行一次脚本看看
Alist里面出现了目录和文件

你可以帖子的脚本改成你自己的Alist ip后。
上传到你的任意服务器启动,都可以创建任何目录文件的备份脚本。

##如果有更好的方法还请大神们赐教。这只是一个我自用的小方法。
最后希望有用到和喜欢的朋友评论+点赞哟 谢谢你们

35 个赞

给大佬点火 :fire:

2 个赞

很有参考意义,可以使用商业网盘的思路很棒
我用的是inotify+rsync 增量备份
不知道这种方法的不打包的情况下,网盘对这种文件数量多的增量备份性能怎么样

3 个赞

因为我服务器多,才写个脚本用用。 每个服务器都装哪些大厂软件力不从心。
不过你如果用增量备份。而不先压缩体积上传的话。后期处理比较麻烦。
而且多文件要上传太久。
压缩备份好处,就算整个被你玩崩了,把上次压缩的拿回来解压可以直接用。

2 个赞

坛除我佬,顶

1 个赞

试试 restic 这个项目,还可以

1 个赞

感谢推荐

马克,备用

马克马克 :drooling_face:

将军威武

我是用 1Panel 的计划任务备份到 AList 的 Crypt 存储

1 个赞

alist挺方便 哈哈 可以挂各种网盘

为啥不直接将webdav挂载成本地硬盘,然后用脚本定时往挂载的盘里塞 :joy:

之前在gpt的帮助下写过一个:joy: 不过用的是其他支持webdav的网盘

我是嫖的 onedrive 做备份, 自己写了个刷新 OneDrive token 的程序 更新到 cf kv 然后写了能读取kv 上传文件的小软件 要备份就直接写脚本定时上传就行了

服务器太多 我现在是一把梭哈。

1 个赞

宝塔是否可用
商店下载都要花钱
除非oss

2 个赞

先码住,等过段时间试一下

1 个赞

这一套一分钱不要应该可以完美搭建。

1 个赞

宝塔上能用吗
宝塔的想备份云盘
但是宝塔商店的插件都要花钱买

2 个赞