七牛云,阿里OSS,文件夹同步

一,七牛云

参考以下三个文档即可实现文件夹同步:

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 name

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.警告

  • 通常情况下,当ECS虚拟机或者服务器在网络、内存、CPU等资源不是特别大的情况下,建议将并发数调整到100以下。如果网络、内存、CPU等资源没有占满,可以适当增加并发数。
  • 如果并发数调得太大,由于线程间资源切换及抢夺等,ossutil上传/下载/拷贝性能可能会下降。并发数过大可能会产生EOF错误。所以请根据实际的机器情况调整--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

 

 

 

 

你可能感兴趣的:(Python)