Shell脚本可以等待文件更改并采取措施吗?


12

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

详细说明:

  1. OpenVPN每1分钟将其状态写入一个文件。
  2. 我需要解析此状态文件并采取措施。
  3. OpenVPN在写入之前会截断状态文件。
  4. 我尝试写入命名管道,但是当应用程序无法截断管道时,我在应用程序中遇到了不想要的(但不是致命的)错误。

如果修改实际上是追加到文件中,则挂起tail -f可能是最简单的方法。但仅用于追加。
SF。

Answers:


21

廉价的肮脏方式:

stat -c %Y file修改时间更改时循环播放并采取措施。

可能更好:

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

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

+1为第二个解决方案
Michael Lowman



0

因此,有一个脚本可以:

1)检查文件的修改时间(带有统计信息)
2)如果修改时间比上次检查的时间新,则它已更改
3)解析它并执行操作
4)其他睡眠1分钟,然后重新循环


0

快速而肮脏的方式:

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

wait_file_changed /tmp/potato
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.