我不知道有没有那种多服务器备份的已有项目或软件。(有的话大佬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后。
上传到你的任意服务器启动,都可以创建任何目录文件的备份脚本。
##如果有更好的方法还请大神们赐教。这只是一个我自用的小方法。
最后希望有用到和喜欢的朋友评论+点赞哟 谢谢你们