Linux 下利用 crontab 自动备份

数据有多重要,不用我详说,如果每天人工备份,又太繁琐,所以利用 crontab 来自动备份文件就是一个很不错的办法。

导出文件或打包压缩文件

Crontab 定时器备份

定时器的介绍

执行命令

crontab -e

编辑里面的内容,如我的内容是

# minute hour day mon week  command
* * * * * /backup.sh //每分钟
10 12 * * * /backup.sh //每天十二点十分
10,30 15-20 * * * /backup.sh //每天下午三点到晚上八点的第 10 分钟和第 30 分钟
10,30 * * * * /backup.sh //每小时的第 10 和 30 分钟
10,30 2-10 * * * /backup.sh //每天 2 点到 10 点(上午)
10,30 2-10 */2 * * /backup.sh //每隔两天 2 点到 10 点(上午)
10,30 2-10 */2 * 2 /backup.sh //每周二 2 点到 10 点(上午)
* */4 * * * /backup.sh //每四个小时

更多 crontab 的用法,如 crontab -l,crontab -r,/sbin/service crond restart|start|stop|reload 等,请自行搜索。当 linux 中没有 service 这个命令的时候 sudo /etc/init.d/cron restart|start|stop

比如每十秒执行一次,还可以用这种方式

* * * * * /usr/bin/curl http://127.0.0.1:3003
* * * * * sleep 10; /usr/bin/curl http://127.0.0.1:3003
* * * * * sleep 20; /usr/bin/curl http://127.0.0.1:3003
* * * * * sleep 30; /usr/bin/curl http://127.0.0.1:3003
* * * * * sleep 40; /usr/bin/curl http://127.0.0.1:3003
* * * * * sleep 50; /usr/bin/curl http://127.0.0.1:3003

update@20170401:VPS 备份到 Gdrive

Dropbox 被塞满了,想到我还有 600G 的 Google Drive 空间,索性就将数据备份到 Google Drive 里吧。

GitHub 上有个项目符合我的需求,访问 https://github.com/prasmussen/gdrive

下载对应的版本,我这里选择了 gdrive-linux-x64,下载执行命令

wget -O /usr/bin/gdrive http://download-url/gdrive-linux-x64
chmod +x /usr/bin/gdrive

执行命令 gdrive about,会提示你通过浏览器访问显示的地址,确定完成授权。

设置备份脚本,vi backup.sh

# 备份信息的设置
REMOTE_DIR="$(date +%Y-%m-%d)"
BACKUP_UPLOAD_DIR="backup"
# 需备份的文件
BACKUP_DIR="/home"
COMPRESS_FILE=$(date +%Y%m%d).tar.gz //有时候多次备份,预防名称重叠,可以用时间戳 $(date +%s)

# 判断本地文件是否存在,如果不存在则创建
if [ ! -d $BACKUP_UPLOAD_DIR ]; then
mkdir -p $BACKUP_UPLOAD_DIR
fi

# 压缩
tar -zcvf $COMPRESS_FILE $BACKUP_DIR

# 上传
cd ~
gdrive upload $COMPRESS_FILE

# 删除本地压缩文件
rm -rf $COMPRESS_FILE

# gdrive info
gdrive about

exit 0

这里测试下,执行命令 ./backup.sh,完成后检查是否正常。这里上传文件都是上传到 gdrive 的根目录,会显得很凌乱,可以通过参数上传到指定的目录。

有时候会需要重新更换用户,目前没有一个官方方式,但可以通过 rm -rf ~/.gdrive/token_*.json,然后执行备份命令即可。

我们还需要设置自动备份功能,利用 crontab,具体参考上面写的相关内容

延伸内容

导出 Mysql/Mariadb 数据库,然后备份上传

#!/bin/sh
DB_USER="username"
DB_PASS="password"
DB_HOST="localhost"
DB_NAME="database_name"
BIN_DIR="/usr/bin"            #the mysql bin path
BACKUP_DIR="/root"    #the backup file directory
DATE=`date +%Y%m%d%H`
$BIN_DIR/mysqldump —single-transaction -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BACKUP_DIR/db_$DATE.sql
cd ~
gdrive upload db_$DATE.sql
# 删除本地压缩文件
rm db_$DATE.sql
# gdrive info
gdrive about
exit 0

自动备份到 Dropbox

这里使用了脚本 dropbox_uploader.sh,该项目地址是 https://github.com/andreafabrizi/Dropbox-Uploader

© 2008 - 2021 · TOURCODER.COM ·