web-dev-qa-db-ja.com

シェルスクリプトは、ファイルが変更されてアクションが実行されるのを待つことができますか?

ファイルの変更を監視し、変更が検出されたときに何らかのアクションを実行するスクリプトを作成できるかどうか疑問に思います。

詳細な説明:

  1. OpenVPNはそのステータスを1分ごとにファイルに書き込みます。
  2. このステータスファイルを解析して対処する必要があります。
  3. OpenVPNは、ステータスファイルに書き込む前にステータスファイルを切り捨てます。
  4. 名前付きパイプに書き込もうとしましたが、パイプが切り捨てられなかった場合、アプリに望ましくない(致命的ではない)エラーが表示されます。
12
davidparks21

安いn '汚い方法:

ループstat -c %Y fileそして変更時間が変更されたときにアクションを実行します。

おそらくより良い:

Inotify cronサービスを使用して、ファイル変更イベントを監視し、アクションを実行します。

/path/to/your/file IN_MODIFY /path/to/your/script $#
21
Cakemox

スクリプトの実行をトリガーするために、incron [1]または他のinotify-stuffを見てください。

[1] http://inotify.aiken.cz/?section=incron&page=about&lang=en

4
m.sr

inotifyはそれを行う正しい方法です。チュートリアルは、まさにこの質問のためにいくつかのLinuxForYouマガジンエディションで提供されています。

2
Suhail Sherif

したがって、次のようなスクリプトがあります。

1)ファイルの変更時刻を確認します(統計を使用)
2)変更時刻が最後にチェックしたときよりも新しい場合は、変更されています
3)解析してアクションを実行します
4)それ以外の場合は、1分間スリープしてから、再ループします

0
Rafiq Maniar

迅速で汚い方法:

function wait_file_changed {
    tail -fn0 "$1" | head -n1
}

wait_file_changed /tmp/potato
0
dctremblay