我见过与rsync并行的GNU,不幸的是,我看不到用例的明确答案。
作为我的脚本的一部分,我有以下内容:
echo "file01.zip
file02.zip
file03.zip
" | ./gnu-parallel --line-buffer --will-cite \
-j 2 -t --verbose --progress --interactive \
rsync -aPz {} user@example.com:/home/user/因此,我运行这个脚本,作为其输出的一部分,一旦到了gnu-parallel步骤,我就得到了这个结果(因为我有--interactive,所以会提示我确认每个文件:
rsync -aPz file01.zip user@example.com:/home/user/ ?...y
rsync -aPz file02.zip user@example.com:/home/user/ ?...y
Computers / CPU cores / Max jobs to run
1:local / 4 / 2
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:2/0/100%/0.0s..。然后,这个过程就挂在这里,什么也不做,数字也不会改变什么的。
在这一点上,我可以从另一个终端做这个:
$ ps axf | grep rsync
12754 pts/1 S+ 0:00 | | \_ perl ./gnu-parallel --line-buffer --will-cite -j 2 -t --verbose --progress --interactive rsync -aPz {} user@example.com:/home/user/
12763 pts/1 T 0:00 | | \_ rsync -aPz file01.zip user@example.com:/home/user/
12764 pts/1 R 0:11 | | | \_ ssh -l user example.com rsync --server -logDtprze.iLs --log-format=X --partial . /home/user/
12766 pts/1 T 0:00 | | \_ rsync -aPz file02.zip user@example.com:/home/user/
12769 pts/1 R 0:10 | | \_ ssh -l user example.com rsync --server -logDtprze.iLs --log-format=X --partial . /home/user/..。因此,我确实可以证实,过程已经启动,但他们显然没有做任何事情。至于确认他们没有做任何事情(而不是上传,在本例中应该这样做),我运行了监视器sudo iptraf,它报告了wlan0上所有流量的0 Kb/s,这是我这里仅有的一个。
问题是-我登录到的服务器,只接受带有密码的SSH身份验证。起初,我认为--interactive允许我以交互方式输入密码,但它反而提示关于是否运行每个命令行并从终端读取一行的用户。只有当响应以'Y‘或'y’开头时才运行命令行。。所以,好的,上面我回答了y,但它之后没有提示我输入密码,而且进程似乎在等待它。我的版本是"GNU并行20160422“。
$ ./gnu-parallel --version | head -1
GNU parallel 20160422那么,如何使用GNU并行运行多个具有密码的rsync任务呢?
发布于 2016-05-10 05:35:58
使用sshpass
doit() {
rsync -aPz -e "sshpass -p MyP4$$w0rd ssh" "$1" user@example.com:/home/user
}
export -f doit
parallel --line-buffer -j 2 --progress doit ::: *.zip并行运行交互程序的基本问题是:如果两个程序准备好输入,哪个程序应该得到输入?因此,GNU的--tty意味着-j1。
https://stackoverflow.com/questions/37128425
复制相似问题