を使用してファイルの変更を監視inotifywait
する小さなスクリプトがあります。何かが変更されると、実行に約 10 秒かかるプロセス (コンパイル、圧縮、再編成など) を介してファイルのバッチが送信されます。
次の例を検討してください。
touch oli-test
inotifywait -mq oli-test | while read EV; do sleep 5; echo "$EV"; done
別のターミナルで数回実行するtouch oli-test
と、ループが進む前に各ループが完了することがわかります。そのシナリオは私にとって非常に現実的です。すでに処理中のファイルを保存するのを忘れたり、間違いに気づいたりすると、イベントが積み重なり、何分も待たされることになります。
このワークフローを客観的に改善するには、2 つの手法があることに気づきました。何が一番簡単かよくわからないので、両方を紹介します。
前のランスルーを中断し、すぐに再起動します。スクリプト化されたプロセスは、現在、単なるコマンドのインライン セットです。それらを Bash 関数に分割することはできますが、それ以上に分割することに夢中ではありません。
処理待ちのリストをデバウンスして、5 つのイベントが同時に発生した場合 (または既に処理中に発生した場合)、もう一度だけ実行するようにします。
(または両方...両方が役立つ場合があると確信しているため)
私は異なるアプローチにもオープンですinotifywait
が、それらは私に同じ結果をもたらし、Ubuntuで作業する必要があります。