回答:
whileループは使用しません。
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
パスがlive_hosts
(たとえば/some/dir/file
)に展開されている場合sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file
(結果はno such file or directory
)であるため、これは機能しないことに注意してください。これらの場合は{//}
、{/}
以下を使用します(詳細はgnu-parallel
マニュアルを参照):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>
られ| tee
ます parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
ループの本体は以前の反復に依存しないため、必要 はありparallel
ません。ホストごとに新しいバックグラウンドプロセスを開始するだけです。
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallel
ただし、特定の側面の管理が容易になります。並行して実行するジョブの数をより簡単に制限できます。
wc -l live_hosts
ディスクスピンドルまたはCPUコアの数よりも大きい場合(タスクがI / OであるかCPUバインドであるかによって異なります)、そのようなソリューションで並列処理から得られる多くの利点を使い果たしてしまいます。parallel
処理速度を目標とする場合、ジョブの数を制限する機能は優れているだけでなく、ほぼ不可欠です。
tee
with を使用することは可能ですか?そのため、出力を確認できます。parallel
sortedstuff