需要明确的是,我正在gnu parallel
设置中运行这个确切的命令(变量已更改):
/usr/bin/parallel -q -j20
rsync --recursive -av -e ssh -oCompression=no -x -T
-oUserKnownHostsFile=/dev/null -oConnectTimeout=15
-i ssh_key -l some_username --chmod=Dugo+rwx,Fugo+rw
--files-from {} /some/base/dir somehostame:/some/other/dir
这将消耗大约 50 个文件(包含 rsync 的文件/目录名称列表),跨越 20 个工作进程gnu parallel
。我昨天晚上运行了上述操作,回来工作时发现仍然有 1 个 rsync 作业挂起:
rsync --recursive -av -e ssh -oCompression=no -x -T -
oUserKnownHostsFile=/dev/null -oConnectTimeout=15
-i ssh-beta-secdata-20180515t213639 -l diskmaker
--chmod=Dugo+rwx,Fugo+rw
--files-from ./some_filelist /some/base/dir somehostname:/some/other/dir
所以要清楚的是,some_filelist
这是我想要执行 rsync 的目录列表。
我会将文件从根目录(就像chroot
“d”)取出/some/base/dir
到远程目录somehostname:/some/other/dir
。
因此,大约有 500 个工作岗位可供选择parallel
。我分析了每个文件列表,没有什么特别的./some_filelist
;来自 rsync dryrun 的标准 200 个文件。
有人对这个问题有诊断吗?我完全不知道这是怎么发生的。如果需要,我可以发布更多片段。
答案1
正如 Ole Tange 所建议的,当您尝试仅使用一个参数(在您的情况下为目录名称)进行 rsync 时,您可能会看到 rsync 要求您输入 ssh 密码。当我在实验中遇到同样的问题时,我发现并行不会提示您输入 ssh 密码,但在后台它需要一个。
应用答案之一这个超级用户问题解决了我的问题。它特别指出;
1)创建公钥;
ssh 密钥生成器
2)将该密钥复制到“somehostname”
ssh-copy-id -i ~/.ssh/id_rsa.pub user@somehostname 或 somehostname 的 IP 地址
就这样。完成这些步骤后,这两台计算机之间的 ssh 连接不需要提供 ssh 密码。就我而言,该命令使用此配置停止挂起。