一,七牛云
参考以下三个文档即可实现文件夹同步:
1.命令行工具(qshell):https://developer.qiniu.com/kodo/tools/1302/qshell
2.使用 qshell 同步目录:https://developer.qiniu.com/kodo/kb/1685/using-qshell-synchronize-directories
3.github qupload使用指令:https://github.com/qiniu/qshell/blob/master/docs/qupload.md
总结步骤:
1.下载qshell,重命名qshell
2.查看当前Linux环境bash类型-->echo $SHELL
3.vim ~/.bashrc 末尾增加一行:export PATH=$PATH:/home/python/Downloads/qshell-v2.3.5,将qshell命令添加到环境变量,接下来就可以在任何位置使用qshell命令了.
4.密钥设置,name为你的用户名,也可随意。
qshell account
5.账号管理
qshell user ls 可列举账户下所有的账户信息
6.此处操作后在当前用户主目录中生成 qshell 目录:ls ~/.qshell/
7.在~/.qshell/目录下创建上传配置文件upload.conf
具体配置如下,各项含义参考:https://github.com/qiniu/qshell/blob/master/docs/qupload.md文档
{
"src_dir" : "",
"bucket" : "",
"file_list" : "",
"key_prefix" : "",
"up_host" : "",
"ignore_dir" : false,
"overwrite" : false,
"check_exists" : false,
"check_hash" : false,
"check_size" : false,
"rescan_local" : true,
"skip_file_prefixes" : "test,demo,",
"skip_path_prefixes" : "hello/,temp/",
"skip_fixed_strings" : ".svn,.git",
"skip_suffixes" : ".DS_Store,.exe",
"log_file" : "upload.log",
"log_level" : "info",
"log_rotate" : 1,
"log_stdout" : false,
"file_type" : 0
}
8.开始文件夹同步,-c 配置并发协程数。
qshell qupload upload.conf -c 1000
二,阿里云OSS
麻烦一点,主要看文档吧:
1.ossutil命令行工具:https://help.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.6.1292.6e1e51a1QwOxmw
2.执行:ossutil cp -r public/ oss://book21 -j 30 -u
[root@izwz91b2n3d35hx10vt3x5z book.tiantianqutao.com]# ossutil cp -r public/ oss://book21 -j 30 -u
3.注意并发数的设置,经调试,30最优。
4.完整参数:
$./ossutil -h
Usage of ossutil:
Options:
-s --short-format 显示精简格式,如果未指定该选项,默认显示长格式。
--snapshot-path= 该选项用于某些场景下加速增量上传批量文件(目前,下载和拷贝不支持该选项)。在cp上传文件时使用该选项,ossutil在指定的目录下生成文件,用于记录文件上传的快照信息。在下一次指定该选项上传时,ossutil会读取指定目录下的快照信息进行增量上传。用户指定的snapshot目录必须为本地文件系统上的可写目录,如果该目录不存在,ossutil会创建该文件用于记录快照信息。如果该目录已存在,ossutil会读取里面的快照信息,根据快照信息进行增量上传(只上传上次未成功上传的文件和本地进行过修改的文件),并更新快照信息 。注意:因为该选项通过在本地记录成功上传的文件的本地lastModifiedTime,从而在下次上传时通过比较lastModifiedTime来决定是否跳过相同文件的上传。所以在使用该选项时,请确保两次上传期间没有其他用户更改了oss上对应的object。当不满足该场景时,如果想要增量上传批量文件,请使用--update选项。另外,ossutil不会自动删除snapshot-path下的快照信息,为了避免快照信息过多,当用户确定快照信息无用时,请用户自行清理snapshot-path。
-j --jobs= 多文件操作时的并发任务数,默认值:5,取值范围:1-10000。
-v --version 显示ossutil的版本(1.0.0.Beta2)并退出。
--output-dir= 指定输出文件所在的目录,输出文件目前包含:cp命令批量拷贝文件出错时所产生的report文件(关于report文件更多信息,请参考cp命令帮助)。默认值为 :当前目录下的ossutil_output目录。
--parallel= 单文件内部操作的并发任务数,取值范围:1-10000, 默认将由ossutil根据操作类型和文件大小自行决定。
-L --language= 设置ossutil工具的语言,默认值:CH,取值范围:CH/EN。
-t --sts-token= 访问oss使用的STS Token(该选项值会覆盖配置文件中的相应设置),非必须设置项。
-m --multipart 指定操作的对象为bucket中未完成的Multipart事件,而非默认情况下的object。
-b --bucket 对bucket进行操作,该选项用于确认作用于bucket的操作。
--delete 删除操作
-e --endpoint= ossutil工具的基本endpoint配置(该选项值会覆盖配置文件中的相应设置),注意其必须为一个二级域名。
-k --access-key-secret= 访问oss使用的AccessKeySecret(该选项值会覆盖配置文件中的相应设置)。
--bigfile-threshold= 开启大文件断点续传的文件大小阈值,默认值:100M,取值范围:0B-9223372036854775807B
--retry-times= 当错误发生时的重试次数,默认值:3,取值范围:1-500
-a --all-type 指定操作的对象为bucket中的object和未完成的Multipart事件。
-r --recursive 递归进行操作。对于支持该选项的命令,当指定该选项时,命令会对bucket下所有符合条件的objects进行操作,否则只对url中指定的单个object进行操作。
-f --force 强制操作,不进行询问提示。
-u --update 更新操作
-c --config-file= ossutil工具的配置文件路径,ossutil启动时从配置文件读取配置,在config命令中,ossutil将配置写入该文件。
-i --access-key-id= 访问oss使用的AccessKeyID(该选项值会覆盖配置文件中的相应设置)。
--acl= acl信息的配置。
-d --directory 返回当前目录下的文件和子目录,而非递归显示所有子目录下的所有object。
--checkpoint-dir= checkpoint目录的路径(默认值为:.ossutil_checkpoint),断点续传时,操作失败ossutil会自动创建该目录,并在该目录下记录checkpoint信息,操作成功则删除该目录。如果指定了该选项,请确保所指定的目录可以被删除。
--type= 计算的类型, 默认值:crc64, 取值范围: crc64/md5
-h --help Show usage message
5.警告
--jobs
和--parallel
选项的数值。如果要进行压测,可在一开始时调低这两项数值,然后逐渐调大直至找到最优值。
三,添加定时任务
crontab简易入门
假设我要设置一个任务,每分钟就要做一个数据同步,这个同步脚本的路径是/home/blue/do/rsyncfile.sh,那么我可以在这么配置,使用blue用户,在终端输入
crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
#分 时 日 月 周 |<==============任务的完整命令行
* * * * * /home/blue/do/rsyncfile.sh
默认情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达“ crontab -e ”去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入“ :wq ”储存后离开 vi 就可以了!
\假如我们需要修改为每5分钟运行数据同步的脚本,那么同样使用 crontab -e 进入编辑:
*/5 * * * * /home/blue/do/rsyncfile.sh
假如服务器出了问题,有一天的数据没有同步,于是我们就需要补数据了,假设这个补数据的脚本是/home/blue/do/rsyncfile_day.sh,但是白天是高峰期,晚上用户不多,是低峰期,我们补数据会占用大量带宽,尤其是白天,会影响正常业务,所以一般我们可以让补数据任务在凌晨2点开始跑,那么同样使用crontab -e 进入编辑:
0 2 1 4 * /home/blue/do/rsyncfile_day.sh
这样,在4月1号凌晨2点0分就会开始启动我们的补数据的脚本了。
同步数据,在互联网公司是再平常不过的任务了,这里大家可以看到crontab的魅力所在了,只需要写最简单的业务逻辑,把调度交给crond做,就完成了一个可靠性很高的一项任务了,如果要自己去额外写这种调度程序,不知道要花多少精力才能做到可靠稳定。
实践:
1.编写ossutil.sh文件,内容如下,切记虽然配置了ossutil环境变量,ossutil 命令还是要写全路径,否则根本无法执行:
#!/bin/bash
/root/ossutil-v1.4.2/ossutil cp -r /www/wwwroot/book.tiantianqutao.com/public/uploads/covers/ oss://book21/uploads/covers/ -j 30 -u
2.chmod +x ossutil.sh
3.手动执行测试:
./ossutil.sh
4.crontab -e,编写5分钟执行一次的任务,并将日志追加到ossutil.log文件中(会自动创建):
*/5 * * * * /root/ossutil-v1.4.2/ossutil.sh >> /root/ossutil-v1.4.2/ossutil.log
6.查看所有定时任务:crontab -l
7.查看定时任务执行日志:tail -f /var/log/cron