shell脚本能等待文件改变并采取行动吗?

我想知道是否可以编写一个脚本来监视文件中的更改,并在检测到更改时执行某些操作。

详细说明:

  1. OpenVPN每1分钟将其状态写入一个文件。
  2. 我需要parsing这个状态文件并采取行动。
  3. 在写入之前,OpenVPN会截断状态文件。
  4. 我试图写入一个命名pipe道,但是当它无法截断pipe道时,我在应用程序中收到了不良的(但不是致命的)错误。

廉价的肮脏的方式:

循环stat -c %Y file并在修改时间改变时采取行动。

可能更好:

使用inotify cron服务来监视文件修改事件并运行您的操作:

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

看看incron [1]或者其他inotify-stuff来触发脚本的执行。

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

inotify将是正确的方式来做到这一点。 一些LinuxForYou杂志版本为这个问题提供了教程。

所以有一个脚本:

1)检查文件上的修改时间(带stat)
2)如果修改时间比上次检查时更新,则更改
3)parsing它并执行你的操作
4)其他睡1分钟,然后再回来