GNU Parallelの代わりにxargsを使用する

GNU Parallelの代わりにxargsを使用する

GNU Parallelはすべての入力組み合わせを作成し、シェル機能をコピーし、出力を混在させることなく3つのリモートサーバーでそれを実行できます。失敗した場合はコマンドを再試行します。

#!/bin/bash

env_parallel --session
process_output() {
  perl -ne '$/=undef; $|=1; @a=split//;
      while(@a){
        print ".",shift @a;
        select($a,$a,$a,0.100);
      }';
}
env_parallel --retries 4 -Sserver{1..3},: \
  'echo X={1} Y={2} Z={3} | process_output' \
  ::: "a'  \"b"{1..3} ::: "c\"  'd"{3..4} ::: "e\$  f'"{7..8}

出力:

.X.=.a.'. . .".b.1. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.1. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.8.
.X.=.a.'. . .".b.1. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.1. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.8.
.X.=.a.'. . .".b.2. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.2. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.8.
.X.=.a.'. . .".b.2. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.2. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.8.
.X.=.a.'. . .".b.3. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.3. .Y.=.c.". . .'.d.3. .Z.=.e.$. . .f.'.8.
.X.=.a.'. . .".b.3. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.7.
.X.=.a.'. . .".b.3. .Y.=.c.". . .'.d.4. .Z.=.e.$. . .f.'.8.

xargs -P$(nproc)各プロセッサは1つのジョブを実行できます。

与えられた

  • 機能 process_output
  • 実行するサーバー(server1、server2、server3)、
  • パラメータグループ(a' "b1, a' "b2, a' "b3;;; c" 'd1, c" 'd2, c" 'd3e$ f'7, e$ f'8

xargs同じタスクを実行するためにGNU Parallelのサーバーエミュレーションをどのように使用できますか?process_output

関連情報