GNU parallel with rsync



我正在尝试使用sshGNU parallel并行运行rsync的一些实例。我运行的命令是这样的:

find /tmp/tempfolder -type f -name 'chunck.*' | sort | parallel --gnu -j 4 -v ssh -i access.pem user@server echo {}; rsync -Havessh -auz -0 --files-from={} ./ user@server:/destination/path

/tmp/tempfolder包含前缀为chunck的文件,它们包含实际的文件列表。

有了这个命令,我得到了对rsync的4个调用,但它们需要一段时间才能开始运行,并且不能一起启动,也不能并行运行。

我做错了什么?

您是否确定rsyncs真的不是并行运行的
在命令运行时使用ps | grep rsync进行检查将显示哪些rsync以及有多少rsync实际同时运行。

默认情况下,parallel保存每个作业的打印输出,直到它完成,这样不同命令的输出就不会混合在一起:

--group  Group output. Output from each jobs is grouped together and is only printed when the command
         is finished. stderr (standard error) first followed by stdout (standard output). This takes
         some CPU time. In rare situations GNU parallel takes up lots of CPU time and if it is
         acceptable that the outputs from different commands are mixed together, then disabling
         grouping with -u can speedup GNU parallel by a factor of 10.
         --group is the default. Can be reversed with -u.

我的猜测是rsync实际上是并行运行的,但从输出来看,感觉它们是串行运行的。-u选项改变了这一点。

--

例如,使用此cmd:

$ for i in 1 2 3 ; do echo a$i ; sleep 1 ; done
a1
a2
a3

默认情况下,在完成之前,我们不会得到任何反馈:

$ (echo a ; echo b ; echo c ) | parallel 'for i in 1 2 3 ; do echo {}$i ; sleep 1 ; done  ' 
a1
a2
a3
b1
b2
b3
c1
c2
c3

而使用-u的东西可以立即打印:

$ (echo a ; echo b ; echo c ) | parallel -u 'for i in 1 2 3 ; do echo {}$i ; sleep 1 ; done  ' 
a1
b1
c1
a2
b2
c2
a3
b3
c3

不过,在这两种情况下,都需要3分才能运行,所以它实际上是同时运行的。。。

相关内容

  • 没有找到相关文章

最新更新