私は柔軟なキューイング構成可能性を備えたIBM i(AS / 400)バッチに精通しています。同様のLinux用のバッチツールを探しています。
最も重要なのは、キューから一度に1つのジョブを取得して実行することです。その後、より多くの項目を見つけるためにキューを検索します。その場合は、次のタスクを実行してください。
at -b
比較的近いですが、ジョブが少なすぎるリソースを占めて負荷が低くなると、より多くのジョブが並列に実行されるため、望ましくありません。
ウィジェットを実行することも別のオプションですが、ウィジェットの動作は静的すぎて、特定のキューで新しいエントリを見つけるためにデーモンとして実行されません。通常のクローンジョブとして実行できますが、キューからジョブの削除を直接処理する必要があります。
必要なものを達成するには、コードを直接書くか拡張する必要がありますか?それとも、代替バッチキュー処理メカニズムを使用できますか?
ベストアンサー1
bashを使用すると、簡単にこれを行うことができます。
1-mkfifoを使用してfifoを作成する(ファイルを作成することもできます)
mkfifo mybuff
2-tail fifoを実行し、各行を実行者に渡します(これは一種のジョブサーバーになります)。
while IFS= read -r line
do
echo "Running: '$line' with bash"
bash -c "$line"
echo "Finished '$line' with exit code: $?"
done < <(tail -f mybuff)
3 - たとえば、コマンドをキューに送信します(クライアント要求ジョブになります)。
echo 'sleep 10' >> mybuff
echo 'echo "hello world"' >> mybuff
echo 'my fancy command to be executed' >> mybuff
...
PS:以下の例のようにステップ2を簡素化できますが、これによりコマンドバッファに "exit"を送信するとジョブリスナーが完了します。
tail -f mybuff | bash -x