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

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

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

详细解释:

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

答案1

廉价又肮脏的方法:

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

可能更好:

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

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

答案2

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

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

答案3

inotify 是正确的做法。LinuxForYou 杂志的某些版本针对这个问题提供了教程。

答案4

因此有一个脚本:

1)检查文件的修改时间(使用 stat)
2)如果修改时间比上次检查的时间新,则表示已经发生改变
3)解析并执行操作
4)否则休眠 1 分钟然后重新循环

相关内容