実行したいコマンドの巨大なリスト(すべて同じタスクを実行)をコンパイルしていますが、リストのコンパイルに時間がかかるため、完了する前に実行を開始したいと思います。もう一つは長く、リストが枯渇する危険はありません。)
コマンドリストを実行する一般的な方法は、コマンドを一覧表示するシェルスクリプトを作成することですが、スクリプトの実行を開始するとコマンドを追加できなくなります。
これまで私が見つけた方法は、コマンドを入れてcommand.list
持つことですparallel --jobs 1 --line-buffer :::: command.list
。ただし、これには非ユーティリティの使用parallel
(GNUパラレルを使用しているため、more-utilsのプログラムと動作しているかどうかわかりません)が含まれます。並列実行は少し過剰になったようですparallel
。
より簡単な方法がありますか?何かをめちゃくちゃにしてリストがすべてなくなったら、どのコマンドが実行されたかを追跡できればいいようです。
答え1
から:https://www.gnu.org/software/parallel/man.html#example-gnu-parallel-as-queue-system-batch-manager
true >jobqueue; tail -n+0 -f jobqueue | parallel --joblog my.log &
echo my_command my_arg >> jobqueue
my_job_generator >> jobqueue
これにより、完了したジョブ履歴(my.log)が提供されます。
GNUパラレルバージョン20220222はジョブのみを出力します。N(そしてに追加してくださいmy.log
)作業するときn+1追加されました。これが許可されていない場合は、別のダミージョブを追加するだけです。
echo true dummy >> jobqueue
以前のバージョンの動作は少し異なりました。