我正在使用 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。
答案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
.