gnu-parallel 对通过 ssh(和公钥身份验证)联系的远程设备有哪些要求

gnu-parallel 对通过 ssh(和公钥身份验证)联系的远程设备有哪些要求

我正在使用 gnu 并行。

我认为我的环境有问题。

我想要实现的目标:
尝试在多台机器上执行命令。
为此,我创建了一个 sshloginfile(恰当地命名为 ~/.parallel/sshloginfile),其中包含一些条目,例如:

#  define hostgroup debian
@debian/5-1.p
@debian/6-1.p
@debian/7-1.p
...
#  define hostgroup qnap with only 1 cpu
1/@qnap/4-1.a
#  define hostgroup macos
@macos/33-1.w
#  local computer
@macos/:

主机组(@debian、@qnap、...)后面的名称(5-1.p、6-1.p、...)是 ~/.ssh/config 中的条目。所有 ssh 连接均通过公钥身份验证进行身份验证。

作为一个简单的命令,我想查看正常运行时间:

parallel --jobs 0 --nonall --tag --slf .. uptime

工作精美

:   19:25  up 4 days, 23:02, 3 users, load averages: 2.14 1.86 1.79
5-1.p    19:25:27 up 23 days, 18:54,  0 users,  load average: 0.05, 0.13, 0.18
6-1.p    19:26:04 up 20:05,  0 users,  load average: 0.03, 0.08, 0.10
4-1.a   sh: line 0: exec: perl: not found

除了一台主机 (4.1-a),它是 QNAP 存储系统。

令我惊讶的是,命令不是使用 sshloginfile 但直接寻址这一台服务器工作:

parallel --jobs 0 --nonall --tag ssh 4-1.a uptime

输出:

19:28:37 up 16 days,  8:24, load average: 0.72, 0.61, 0.59

因此,如果通过 sshloginfile 寻址设备,则似乎需要满足依赖项/先决条件,否则则不需要。而且好像是perl,其实威联通存储系统上并没有安装。
有人知道为什么会这样吗?

并行版本:GNU并行20181222
主机操作系统版本:Darwin 18.2.0 Darwin内核版本18.2.0:2018年11月12日星期一20:24:46 PST; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64 [macOS 10.14.2]
工作设备的操作系统版本:Linux 4.14.90+ #1183 Fri Dec 21 13:50:04 GMT 2018 armv6l GNU/Linux 操作系统
版本“有问题“设备 4-1.a:Linux 3.4.6 #1 Wed Jan 2 07:02:07 CST 2019 armv5tel 未知

附录:手册页指出:
DEPENDENCIES
GNU 并行使用 Perl,以及 Perl 模块 Getopt::Long、IPC::Open3、Symbol、IO::File、POSIX 和 File::Temp。对于远程使用,它还使用 rsync 和 ssh。

rsync 安装在“有问题”的设备上。

答案1

自 20150122 年起,GNU Parallel 就依赖于perl安装在远程系统上。

您所看到的情况表明qnap服务器没有安装 Perl。

如果你运行:

parallel -vvS server echo ::: foo
parallel -vvS server --wd ...  --trc {}.foo touch {}.foo ::: *

您将看到 GNU Parallel 实际运行的是什么。正如您所看到的,它相当复杂并且包含一个 Perl 脚本。这就是远程系统上需要 Perl 的原因。

有关此内容的更多详细信息,请阅读:https://www.gnu.org/software/parallel/parallel_design.html#The-remote-system-wrapper

我的猜测是:

parallel -S 1/4-1.a echo ::: foo

还将导致:

sh: line 0: exec: perl: not found

所以解决方案可能是在qnap.

相关内容