gpt4 book ai didi

shell - GNU 与 rsync 并行

转载 作者:行者123 更新时间:2023-12-04 12:47:44 32 4
gpt4 key购买 nike

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

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 的文件它们包含实际的文件列表。

使用这个命令,我接到了 4 个 rsync 的电话。好的,但它们需要一段时间才能开始运行,并且不会一起启动,也不会并行运行。

我究竟做错了什么?

最佳答案

你是确定 rsync 真的不是并行运行的吗?
ps | grep 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.

我的猜测是 rsyncs 实际上是并行运行的,但从输出中感觉它们是串行运行的。 -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 秒才能运行,所以它实际上是同时运行的......

关于shell - GNU 与 rsync 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672951/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com