写在前面
担心服务器存档损坏?担心硬盘损坏导致服务器不复存在?
本文将通过编写简单的脚本来实现本地备份,并通过搭建WebDav来实现云备份。
本地备份
即复制新存档到一个文件夹,并删除原存档(为防止压缩占用CPU导致服务器卡顿,本地备份不建议压缩)
shell脚本示例
#!/bin/bash
#源文件夹路径
SOURCE_DIR="/server/world"
#总备份文件夹
BACKUPS_DIR="/backups"
#获取当前时间戳,格式化为日期和时间
TIMESTAMP=$(date +"%m%d%H")
#子备份文件夹路径
BACKUP_DIR="${BACKUPS_DIR}/${TIMESTAMP}"
#进行备份
cp -a "$SOURCE_DIR" "$BACKUP_DIR"
#删除180分钟前的备份文件
find "${BACKUPS_DIR}" -type d -mmin +180 -delete
云备份
将本地备份的文件打包压缩后上传至云盘等,以防止硬件损坏导致存档丢失。
这里云服务以Alist的WebDav为例,压缩方式以Gzip为例,编写一个shell脚本实现云备份
#!/bin/bash
#备份目录
BACKUPS_DIR="/backups"
#获取当前时间戳,格式化为日期和时间
TIMESTAMP=$(date +"%m%d%H")
#子备份文件夹路径
BACKUP_DIR="${BACKUPS_DIR}/${TIMESTAMP}"
#压缩备份文件路径
BACKUP_FILE="${BACKUP_DIR}.tgz"
#进行打包压缩(以Gzip为例)
cd ${BACKUP_DIR}
tar -czvf ${BACKUP_FILE} .
#WebDav地址(以Alist为例)
WEBDAV="http://localhost:5244/dav/backups"
#用户名密码
USER=""
PASSWORD=""
#上传文件
curl "${WEBDAV}/${TIMESTAMP}.tgz" -X "PUT" -u "${USER}:${PASSWORD}" -T "${BACKUP_FILE}"
#删除压缩备份文件
rm ${BACKUP_FILE}
#删除旧备份
curl "${WEBDAV}/${TIMESTAMP}.tgz" -X "DELETE" -u "${USER}:${PASSWORD}"
定时备份
通过Cron来实现备份脚本的自动执行
赋予脚本可执行权限
chmod +x /server/backup-local.sh
chmod +x /server/backup-cloud.sh
打开crontab文件
crontab -e
添加定时任务(以每小时一次本地备份、每天一次云备份为例)
0 * * * * /server/backup-local.sh
10 0 * * * /server/backup-cloud.sh
此处为每小时0分执行一次本地备份脚本,每天的0点10分执行一次云备份(延后10分钟以等待本地备份完成)