ssh (および公開鍵認証) 経由で接続されるリモート デバイスに対する gnu-parallel の要件は何ですか?

ssh (および公開鍵認証) 経由で接続されるリモート デバイスに対する gnu-parallel の要件は何ですか?

私はgnu-parallelを使用しています。

私の環境に問題があると思われます。

達成したいこと:
複数のマシンでコマンドを実行しようとしています。
そのために、次のようなエントリを含む 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

ただし、QNAP ストレージ システムである 1 つのホスト (4.1-a) は除きます。

驚いたことに、コマンドないsshloginfileを使用する代わりに、この1つのサーバーに直接アクセスしますする仕事:

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 のようですが、実際には QNAP ストレージ システムにはインストールされていません。
なぜそうなるのか、誰か手がかりがありますか?

パラレルのバージョン: GNU parallel 20181222
ホストの OS バージョン: Darwin 18.2.0 Darwin カーネル バージョン 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64 [macOS 10.14.2]
動作デバイスの OS バージョン: Linux 4.14.90+ #1183 Fri Dec 21 13:50:04 GMT 2018 armv6l GNU/Linux
「問題のある」デバイス 4-1.a の OS バージョン: Linux 3.4.6 #1 Wed Jan 2 07:02:07 CST 2019 armv5tel 不明

補足: マニュアル ページには次のように記載されています:
依存関係
GNU parallel は Perl と、Perl モジュール Getopt::Long、IPC::Open3、Symbol、IO::File、POSIX、および File::Temp を使用します。リモートで使用する場合は、ssh で rsync も使用します。

「問題のある」デバイスに rsync がインストールされています。

答え1

GNU Parallel は 20150122 以降、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#リモートシステムラッパー

私の推測では、

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

また、次のような結果も生じます。

sh: line 0: exec: perl: not found

したがって、解決策としては、おそらく に perl をインストールすることになりますqnap

関連情報