%20%E7%B5%8C%E7%94%B1%E3%81%A7%E6%8E%A5%E7%B6%9A%E3%81%95%E3%82%8C%E3%82%8B%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%20%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%20gnu-parallel%20%E3%81%AE%E8%A6%81%E4%BB%B6%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私は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 も使用します。
答え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
。