10

を使用してファイルの変更を監視inotifywaitする小さなスクリプトがあります。何かが変更されると、実行に約 10 秒かかるプロセス (コンパイル、圧縮、再編成など) を介してファイルのバッチが送信されます。

次の例を検討してください。

touch oli-test
inotifywait -mq oli-test | while read EV; do sleep 5; echo "$EV"; done

別のターミナルで数回実行するtouch oli-testと、ループが進む前に各ループが完了することがわかります。そのシナリオは私にとって非常に現実的です。すでに処理中のファイルを保存するのを忘れたり、間違いに気づいたりすると、イベントが積み重なり、何分も待たされることになります。

このワークフローを客観的に改善するには、2 つの手法があることに気づきました。何が一番簡単かよくわからないので、両方を紹介します。

  1. 前のランスルーを中断し、すぐに再起動します。スクリプト化されたプロセスは、現在、単なるコマンドのインライン セットです。それらを Bash 関数に分割することはできますが、それ以上に分割することに夢中ではありません。

  2. 処理待ちのリストをデバウンスして、5 つのイベントが同時に発生した場合 (または既に処理中に発生した場合)、もう一度だけ実行するようにします。

(または両方...両方が役立つ場合があると確信しているため)

私は異なるアプローチにもオープンですinotifywaitが、それらは私に同じ結果をもたらし、Ubuntuで作業する必要があります。

4

3 に答える 3