問題タブ [gnu-parallel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
3931 参照

linux - 以下のシェル スクリプトで scp の代わりに rsync を使用してファイルをコピーする方法を教えてください。

以下のシェルスクリプトと並行してGNUを使用して、scpを使用してファイルを並行してコピーしていますが、正常に動作しています。

以下のシェルスクリプトrsyncの代わりにどのように使用できるかわかりません。転送速度の点で比較してパフォーマンスが向上scpするかどうかを確認しようとしています。rsyncscp

以下は私の問題の説明です -

で以下のシェルスクリプトを実行しているため、ファイルmachineBをコピーしています。machineCmachineAmachineA

ファイルがそこにない場合は、確かmachineBにそこにあるはずなので、最初からファイルをコピーしようとします。そこにない場合は、から同じファイルをコピーしようとします。machineCmachineBmachineBmachineC

GNU Parallel ライブラリを使用してファイルを並行してコピーしていますが、正常に動作しています。現在、プライマリとセカンダリの両方で 5 つのファイルを並行してコピーしています。

以下は私が持っている私のシェルスクリプトです -

scp上記のコマンドを次のように置き換える方法はありますが、同時にrsync5 つのファイルを並行してコピーしたいですか?PRIMARYSECONDARY

0 投票する
2 に答える
17989 参照

bash - GNU Parallel and Bash functions: マニュアルの簡単な例を実行する方法

bash関数を簡単に並列化できると思うケースがあるので、GNU Parallelを学ぼうとしています。それで、学習しようとして、例があるGNU Parallelマニュアルに行きました...しかし、それを機能させることさえできません! ウィット:

ご覧のとおり、単純な例を実行することすらできません。したがって、私はおそらく驚くほど愚かで基本的なことをしています...しかし、私は途方に暮れています.

ETA: コメンター (chmod +x、set -vx) が示唆するように:

ETA2: 注意してください。スクリプトで「doit 1」を呼び出すだけで、それが実行されます。関数は有効ですが、エクスポートされていませんか?

0 投票する
1 に答える
3404 参照

gnu-parallel - GNU Parallel: 入力が端末から読み取られるときの警告を抑制します

入力が端末から読み取られると、GNU Parallel は常に警告を表示します。

しかし、端末から読みたい場合もあります (たとえば、エントリごとに別の場所からコピー & ペーストする場合)。この警告をオフにすることはできますか? man parallelまたはにそのようなオプションが見つかりませんでしたman parallel_tutorial

2>/dev/null他のプログラムからの警告メッセージもオフになるため、 のような安価なソリューションは必要ないことに注意してください。たとえば、次の単純なスクリプトを考えてみましょう。

に出力されたメッセージstderrはすべて抑制されます。


目的の効果を達成するために、catいくつかのことを実行できることに気付きました. read </dev/ttyしかし、元の質問に焦点を当てましょう。

0 投票する
1 に答える
1360 参照

macos - Mac OS X: GNU parallel がリモート サーバーのコア数を検出できない

大学のサーバーでリモートでいくつかのテストを実行できるように、自作を使用して Mac に GNU パラレルをインストールしました。私はチュートリアルをすばやく実行していましたが、実行すると

メッセージを受け取りました

おそらく関連して、パスに並列を追加したことはなく、「並列」は認識されたコマンドではないという警告が表示されましたが、並列はとにかく実行され、まだ正しくエコーされました。この特定のサーバーには 16 個のコアがありますが、それらを認識するために並列化するにはどうすればよいですか?

0 投票する
1 に答える
217 参照

parallel-processing - ファイルから読み取った 2 つの引数を指定してコマンド (phantomjs) を起動します。

シェルからコマンド (phantomjs) を起動するための 2 つの引数である、各行に 2 つの文字列を含むファイルがあります。GNU parallel を使用して、各行に対してコマンドを起動します。ここで、手動で起動する場合は、次のように記述します。

そしてすべてが機能します。しかし、並列で試してみると、何かがうまくいかない:

これが出力されます

なぜそれが機能しないのか、リンクの後に冗長モード(最初の2行)に\文字があるのか​​ 理解できません。

cat -vet 出力:

0 投票する
3 に答える
759 参照

arrays - GNU Parallel での連想配列へのアクセス

Bash で次のことを想定します。

シーケンスではなく、連想配列のインデックスを使用することを確認して、GNU Parallel でも同じことができますか? 配列をエクスポートできないという事実は、不可能ではないにしても、これを困難にしますか?

0 投票する
3 に答える
175 参照

bash - running -- 最初は不明 -- 並行して実行された bash コマンドの数

正確な数と正確な数を事前に知らなくても、一連のコマンドを実行できるようにしたいと考えています。これらのコマンドは通常、それぞれ数時間または数日かかる計算です。コマンドはクラスターで実行され、ノードを事前に予約する必要があるため、事後的にコマンドのリストを変更する方法が必要です。

(それが何であれ)(i)実行中にコマンドを読み取り、プロセッサが解放されるまでコマンドを起動し続け、(ii)コマンドが実行されなくなったら終了することを望みます。

これを達成する最も簡単な方法は何ですか?

編集:これは機能します(GNUパラレルで)

まず、回答で示唆されているように、変更parallel(例: /usr/bin/parallel)、変更

次に、次のようにテストします。

ノート

  • 「-u」は「グループ解除」用であり、すべての行が読み込まれ、実行され、表示され、procs が利用可能になります。
  • "-E EXIT" は kill できるようにするためのものです: EXIT を書いた後、'tail -f' が死ぬように別の (任意の) 文字列を書かなければなりません。(上記の変更を行わないと、パラレルはストリームを開いたままにし、これは機能しません)
  • ストリームが空で CPU がアイドル状態の場合は終了しませんif(items_processed>0 && nprocs_running==0) exit。その後、テールを殺すという問題がまだありますが、これは、入力ファイルに定期的に偽の書き込みを行うことで、醜い方法でハッキングされる可能性があります。

私が試したこと

私が考えることができる最も単純な構文は、GNU parallel を使用して次のようなものになります。

これはうまく機能します...ただし、コマンドの数がCPUの数よりも少ない場合(これは一般的です。16 cpuマシンで10プロセスから開始する場合があります)、EOFが発生し、ストリームを閉じると表示されますさらにコマンドを追加する方法はありません。したがって、実行中のコマンドが終了するたびに終了します。

EOFの問題を回避するために、テールでストリームをたどることができると思いました

たとえば、次の簡単なテストのように:

これは非常に近くなり、コマンドを追加できますが、ファイルは閉じません。ただし、最後まで到達せず、「EXIT」を読み取っても停止せず、代わりにハングします。理由はわかりません。ブロックで読み込んでいるのかもしれません(??) また、すべてのプロセスが終了し、ファイルに何もする必要がなくなっても停止ません。

(これは、回答で提案されているバグに関連している可能性があるので編集してください)

または、「wait PID」を使用して各 CPU のいくつかの子プロセスを起動することを想像できますが、それは複雑すぎるように見えます。さらに、これはまさに GNU/parallel が行うべきことのようです。

助けや提案をありがとう!


ここの コメントに基づいて編集します。これは少なくとも終了しますが、最初にキーワード「EXIT」が必要です。


このスレッドで提案されているように、「parallel -j2」の代わりに「xargs -P2」を使用することもできますが、それでは問題は解決しません。

0 投票する
1 に答える
183 参照

gnu-parallel - GnuParallel: クラスター上でスクリプトを並列化すると、スクリプトはマスター ノードにファイルを書き込みます

テキストファイル内のディレクトリ名のリストを入力として受け取る単純なbashスクリプトがあります。これらのディレクトリを 1 つずつトラバースし、出力をpwdファイルにコピーして、このファイルを結果ディレクトリに移動します。Gnuparallel を使用して、私の 4 コア マシンでこのスクリプトを簡単に並列化できます。bash スクリプト ( myScript.sh) は次のとおりです。

ここで、クラスターで同じスクリプトを並列化したいと考えています。すべてのワーカー ノードがマスター ノードのホーム ディレクトリをマウントしているので、ls /home/zahaib/すべてのワーカー ノードの出力を確認できます。

を使って--envエクスポートしてみましたpar_func。また、ファイル内にワーカー ノードのリストもありworkerList.txtます。parallel私の最初のアイデアは、上記のスクリプトの最後の行を次のように変更して呼び出すことでした。

ただし、これは機能していないようで、マスター ノードのシェルは実行後にハングします./myScript.sh。ここで何が欠けていますか?

私のfolderList.txtの内容は次のとおりです。

私のworkerList.txtの内容は次のとおりです。

0 投票する
2 に答える
3945 参照

linux - Bash での並列反復 IP アドレス

大規模なプライベート /8 ネットワークを扱っており、ポート 443 でリッスンし、HTTP HEADER 応答に特定のバージョンが示されているすべての Web サーバーを列挙する必要があります。

最初に、接続スキャンを使用して実行し、出力ファイルを grep することを考えていましたが、実際には「開いている」ポートを「フィルター処理」する必要があると述べたnmap多くの誤検知がスローされることが判明しました(接続スキャンを使用: )。nmapnmap -sT -sV -Pn -n -oA foo 10.0.0.0/8 -p 443

だから今、私はbashで何かをスクリプト化することを考えていましたcurl- 疑似コードは次のようになります:

私は bash にあまり詳しくないので、これを適切にスクリプト化する方法がわかりません。次のようにする必要があります。

  • すべての IP をループする
  • X個の脅威のみが並行して実行されることを確認してください
  • 理想的には、出力をカットして、一致するホストの IP のみを 1 つのファイルに書き留めます。
  • 理想的には、一致するサーバー バージョンのみが記録されるようにします。

提案や方向性の指摘は大歓迎です。

0 投票する
1 に答える
238 参照

gnu-parallel - gnu parallel を使用してタイムアウト時にアクションをトリガーする

gnu parallel によって生成されたタスクがタイムアウトした場合に、アクション (管理者に電子メールを送信するなど) をトリガーする方法はありますか?