シェルスクリプトは、ファイルの変更を待ってアクションを実行できますか?


12

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

詳細な説明:

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

変更が実際にファイルに追加される場合、ハングするのtail -fがおそらく最も簡単な方法です。ただし、追加のみです。
SF。

回答:


21

安い汚い方法:

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

おそらくより良い:

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

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

2番目のソリューションの+1
マイケルローマン


2

inotifyが正しい方法です。このまさに質問のために、いくつかのLinuxForYou雑誌版でチュートリアルが提供されています。


0

次のスクリプトを用意します。

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


0

早くて汚い方法:

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

wait_file_changed /tmp/potato
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.