Crontab+Rclone服务器数据备份
主要利用Rclone强大的远程同步能力,实现数据的上传云端。
Crontab编写定时任务执行备份脚本,实现数据压缩加密,同步至云端一气呵成!
1.Rclone
1.1 安装以及环境配置
官方下载地址:Rclone downloads
我这里将通过Debian系统进行演示,下载之后会得到一个压缩包,解压之后会得到一下文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| root@10-9-3-62:/my/rclone# wget https://downloads.rclone.org/v1.66.0/rclone-v1.66.0-linux-amd64.zip
--2024-05-24 11:24:59-- https://downloads.rclone.org/v1.66.0/rclone-v1.66.0-linux-amd64.zip
Resolving downloads.rclone.org (downloads.rclone.org)... 95.217.6.16, 2a01:4f9:c012:7154::1
Connecting to downloads.rclone.org (downloads.rclone.org)|95.217.6.16|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21137057 (20M) [application/zip]
Saving to: ‘rclone-v1.66.0-linux-amd64.zip’
rclone-v1.66.0-linux-amd64.zip 100%[===================================================================================================>] 20.16M 6.49MB/s in 3.1s
2024-05-24 11:25:03 (6.49 MB/s) - ‘rclone-v1.66.0-linux-amd64.zip’ saved [21137057/21137057]
root@10-9-3-62:/my/rclone# unzip rclone-v1.66.0-linux-amd64.zip
Archive: rclone-v1.66.0-linux-amd64.zip
creating: rclone-v1.66.0-linux-amd64/
inflating: rclone-v1.66.0-linux-amd64/README.html
inflating: rclone-v1.66.0-linux-amd64/README.txt
inflating: rclone-v1.66.0-linux-amd64/rclone
inflating: rclone-v1.66.0-linux-amd64/git-log.txt
inflating: rclone-v1.66.0-linux-amd64/rclone.1
root@10-9-3-62:/my/rclone# cd rclone-v1.66.0-linux-amd64/
root@10-9-3-62:/my/rclone/rclone-v1.66.0-linux-amd64# ls
README.html README.txt git-log.txt rclone rclone.1
|
之后添加环境变量方便后期使用
1
2
3
4
5
6
7
8
9
10
11
12
| vim /etc/profile
#在文件最末尾添加下面内容,后面的路径根据自己的解压路径填写
export PATH=$PATH:/my/rclone/rclone-v1.66.0-linux-amd64
#使得修改之后的内容生效
source /etc/profile
echo $PATH
#输出下面内容就是生效了
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/my/rclone/rclone-v1.66.0-linux-amd64
#然后查看rclone是否配置成功,在任意目录
rclone version
#能看见输出的版本号就配置成功了
|
1.2 远程云端信息配置
我这里是使用Alist的WebDAV协议。我已经提前部署好了Alist,并且在Alist挂载阿里云盘,所以我现在可以使用rclone同步至阿里云盘。
1
2
3
| rclone config
#之后会开启一个可交互的状态,根据提示完成相关远程的配置
#不同服务商配置内容不太一样,不做演示,自行搜索。
|
2.Crontab
2.1 定时任务编写
Crontab是 Linux 系统中用于设置周期性被执行的指令的命令。
1
2
| #编辑当前用户的定时任务表
crontab -e
|
一条crontab命令格式:时间 指令
时间:分 时 天 月 周
1
2
3
4
| * 取值范围内的所有数字
/ 每过多少个数字
- 从X到Z
,散列数字
|
1
2
3
4
5
6
7
8
| * * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
|
详细时间的编写可参考菜鸟教程
参考文章:Linux Crontab 定时任务 | 菜鸟教程 (runoob.com)
2.2 压缩文件并设置密码
定时任务一般是用于执行一个脚本,现在就是编写一个备份脚本,用于定时任务的执行。
压缩文件:
使用zip进行文件的压缩。
1
| zip -r -P password xxx.zip redis
|
自己替换实际压缩包密码,xxx.zip 是生成的压缩包名,我这里是以打包redis的数据目录作为演示

会在/my/1panel/1panel/apps/redis/redis.zip生成压缩包文件。
2.3 编写执行脚本脚本
1
2
3
4
5
6
7
8
9
10
11
| #redisbackup.sh
# 获取当前日期和时间,格式为 YYYYMMDD-HHMM
timestamp=$(date +%Y%m%d-%H%M)
# 使用变量来构建zip文件名
zip_filename="/my/1panel/1panel/apps/redis/redis-${timestamp}.zip"
# 使用变量来创建zip文件,压缩密码myredis
zip -r -P myredis "${zip_filename}" /my/apps/redis/redis
#将rclone产生的日志输出到指定日志文件
rclone sync -v "${zip_filename}" alist:/tianyi/redis >> /my/apps/redis/rclone.log 2>&1
|
尝试执行脚本./redisbackup.sh,功能正常,建议提前把备份文件夹在云端创建好,有时候会莫名奇妙找不到路径。
2.4 添加定时任务
编写定时任务,先测试每分钟运行一次
1
2
3
4
| #编写当前用户的定时任务
crontab -e
#然后输入
* * * * * /my/apps/redis/redisbackup.sh
|
等待一分钟,是否正常执行。
en… 脚本执行有点异常

环境变量在定时任务中没有生效貌似,把二进制文件rclone 改成全路径。
脚本最后一行替换为
1
| /my/rclone/rclone-v1.66.0-linux-amd64/rclone sync -v "${zip_filename}" alist:/tianyi/redis >> /my/apps/redis/rclone.log 2>&1
|
成功达成目的!

成功备份至Alist
