Featured image of post Crontab+Rclone服务器数据备份

Crontab+Rclone服务器数据备份

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的数据目录作为演示

image-20240524142556387

会在/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… 脚本执行有点异常 image-20240524145722725

环境变量在定时任务中没有生效貌似,把二进制文件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

成功达成目的!

image-20240524150038766

成功备份至Alist

image-20240524150122361