一、一些准备工作:rclone和网盘授权
rclone的安装和google drive/onedrive 的访问授权见文章:
二、备份脚本编写及授权
创建脚本文件:
touch /home/Backup/backup.sh
vi /home/Backup/backup.sh
脚本文件内容示例如下,不需要的功能自行在前方加上#号注释掉,删除几天前的备份,数字自行修改即可。其他内容自行按需修改成自己的即可:
备份脚本文档示例
#!/bin/bash
# 定义GOOGLE DRIVE的备份目录
GD_PATH="GdriveBackup:Backup"
# 定义备份的目录及文件,不同的目录用空格分开
BACKUP_SRC="/home/wwwroot/omo.moe/usr"
# 定义临时文件存放目录
BACKUP_DST="/home/Backup"
# 设置MYSQL基本信息
MYSQL_SERVER="localhost"
MYSQL_USER="root"
MYSQL_PASS="your password"
# 定义想要备份的数据库,多个数据库用空格分开
BACKUP_DATABASE="typecho_omo"
# 定义文件前缀名
NOW=$(date +"%Y.%m.%d")
OLD=$(date -d -5day +"%Y.%m.%d")
# 备份网站数据文件
zip -r $BACKUP_DST/auto_fileData_$NOW.zip $BACKUP_SRC
# 备份mysql数据库
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --databases $BACKUP_DATABASE > $BACKUP_DST/$NOW-auto-Databases.sql
# 使用rclone上传到google drive
rclone copy -v --stats 15s --bwlimit 40M $BACKUP_DST/ --include "$NOW-auto-Databases.sql" --include "auto_fileData_$NOW.zip" $GD_PATH
# 删除本地的临时文件
rm -f $BACKUP_DST/$NOW-auto-Databases.sql $BACKUP_DST/auto_fileData_$NOW.zip
# 删除5天前的备份
rclone delete $GD_PATH/ --include "$OLD-auto-Databases.sql" --include "auto_fileData_$OLD.zip"
# 删除回收站所有文件-可选、慎用
rclone delete GdriveBackup: --drive-trashed-only --drive-use-trash=false --verbose=2
使用chmod指令赋予执行权限:
chmod +x /home/Backup/backup.sh
三、创建自动备份任务并测试
使用 crontab 每天4点定时执行自动备份脚本:
crontab -e
复制以下内容粘贴并输入:wq
保存:
0 4 * * * /bin/bash /home/backup/backup.sh >/dev/null 2>&1
手动测试看看脚本是否正确运行:
bash /home/Backup/backup.sh
时区设置为东八区:
timedatectl set-timezone Asia/Shanghai
重启定时任务:
service crond restart
重启系统日志:
service rsyslog restart
最后观察下系统日志尾巴状态,是否时区已经调整成功:
tail -f /var/log/cron
关于crontab格式详细说明,感兴趣的可以查阅:
crontab 格式详解
crontab -e 编辑
crontab -l 查看
#m h dom mon dow command
m分钟 0-59
h小时 0-23
dow天1-31
mon月 1-12
dow 星期 1-6 0表示星期天
command就是要执行的命令
除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:
星号 表示任意值,比如在小时部分填写*代表任意小时(每小时)
逗号 可以允许在一个部分中填写多个值,比如在分钟部分填写1,3表示一分钟或三分钟
斜线 一般配合 *使用,代表每隔多长时间,比如在小时部分填写*/2代表每隔两分钟。所以 */1和 *没有区别
1.* * * * * date >> /home/postgres/time.log # 每隔一分钟执行一次任务
2.0 * * * * date >> /home/postgres/time.log # 每小时的0点执行一次任务,比如6:00,10:00
3. 6,10 * 2 * * date >>/home/postgres/time.log # 每个月2号,每小时的6分和10分执行一次任务
4.*/3,*/5 * * * * date >> /home/postgres/time.log # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06
3* * * * /home/meng/hello.sh就是:每小时的03分执行/home/meng/下的hello.sh脚本*/59-17 * * mon,tue,wed,thur,fri wall "Are we there yet?"
53 * * * /usr/bin/apt-get update 就是每天的03:05执行“/usr/bin/apt-getupdate
*/5 9-17 * * mon,tue,wed,thur,fri wall "Arewe there yet?" 就是在所有的工作日的(9-17点)每过5分钟出现"Arewe there Yet?"
#每晚的21:30重启apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日
454 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每天早上6点10分
10 6 * * * date
#每两个小时
0*/2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
023-7/2,8* * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
011 4 * mon-wed date
#1月份日早上4点
04 1 jan * date
或者使用在线生成工具生成需要的定时任务:
online crontab
最后查看你的Google Drive或者Onedrive确认下运转是否正常:
附送同步其他网站内容的示例
#!/bin/bash
# 定义GOOGLE DRIVE的同步目录
GD_PATH="GdriveBackup:Backup"
# 定义本地需要同步的目录及文件,不同的目录用空格分开
RSYNC_DST="/home/wwwroot/omo.moe/usr"
# 定义同步源文件临时存放目录
RSYNC_SRC="/home/Rsync"
# 设置MYSQL基本信息
MYSQL_SERVER="localhost"
MYSQL_USER="root"
MYSQL_PASS="your password"
# 定义想要同步的数据库,多个数据库用空格分开
RSYNC_DATABASE="typecho_omo"
# 定义文件前缀名
NOW=$(date +"%Y.%m.%d")
# 使用rclone从google drive下载当天同步数据到本地
rclone copy -v --stats 15s --bwlimit 40M $GD_PATH/ --include "$NOW-auto-Databases.sql" --include "auto_fileData_$NOW.zip" $RSYNC_SRC
#使用mysql -e指令同步数据库文件
mysql -u$MYSQL_USER -h$MYSQL_SERVER -p$MYSQL_PASS -e "USE $RSYNC_DATABASE;
source $RSYNC_SRC/$NOW-auto-Databases.sql;"
# 同步网站数据文件
unzip -o -d $RSYNC_SRC $RSYNC_SRC/auto_fileData_$NOW.zip&&\cp -rf $RSYNC_SRC/home/* /home
#调整网站数据文件归属权限
chown -R nginx:nginx $RSYNC_DST
#删除临时文件数据
rm -rf $RSYNC_SRC/$NOW-auto-Databases.sql $RSYNC_SRC/auto_fileData_$NOW.zip $RSYNC_SRC/home
记得同步脚本相对你的备份脚本延后数分钟后自动运行,以免当天你的备份文件还未完全上传到网盘里。
例如:
10 4 * * * /bin/bash /home/Rsync/rsync.sh >/dev/null 2>&1
表示每天4点10分从你的网盘同步数据
6 comments
[...]转:https://omo.moe/archives/616/[...]
可以实现,备份后删除本地文件吗,谢谢
脚本里这行就是删除本地的备份文件:
删除本地的临时文件rm -f $BACKUP_DST/$NOW-auto-Databases.sql $BACKUP_DST/auto_fileData_$NOW.zip
是否有试过S3存储的定时备份?
稳定付费自然可以的,我是白嫖党,网盘不要钱,而且博客就几百兆占用,随便备份下就够了
[...]https://omo.moe/archives/616/[...]