この種の問題に頻繁に遭遇した場合は、Parallelを試してください。これはdsh(分散シェル)に似ていますが、セマフォのカウントなどのきちんとした機能があり、アクティブに維持されます。
ドキュメントから:
例:キューシステム/バッチマネージャーとしてのGNU Parallel
GNU Parallelは、単純なジョブキューシステムまたはバッチマネージャーとして機能します。アイデアは、ジョブをファイルに入れて、GNU Parallelに継続的に読み取らせることです。GNU Parallelはファイルの終わりで停止するため、tailを使用して読み続けます。
echo >jobqueue; tail -f jobqueue | parallel
ジョブをキューに送信するには:
echo my_command my_arg >> jobqueue
もちろん、-Sを使用して、ジョブをリモートコンピューターに分散できます。
echo >jobqueue; tail -f jobqueue | parallel -S ..
表面をなぞっただけの素晴らしい例がたくさんあります。ここにクールなものがあります。
例:ローカルおよびリモートコンピューターへの作業の分散
* .mp3を* .oggに変換し、ローカルコンピューターとサーバー2のCPUコアごとに1つのプロセスを実行します。
parallel --trc {.}.ogg -j+0 -S server2,: \
'mpg321 -w - {} | oggenc -q0 - -o {.}.ogg' ::: *.mp3