Назад | Перейти на главную страницу

Может ли сценарий оболочки дождаться изменения файла и принять меры?

Интересно, могу ли я написать сценарий, который будет отслеживать изменение файла и выполнять какое-либо действие при обнаружении изменения.

Детальное объяснение:

  1. OpenVPN записывает свой статус в файл каждую минуту.
  2. Мне нужно проанализировать этот файл состояния и принять меры.
  3. OpenVPN обрезает файл состояния перед записью в него.
  4. Я пробовал писать в именованный канал, но получаю нежелательные (но не фатальные) ошибки в приложении, когда оно не может усечь канал.

Дешево и грязно:

Петля stat -c %Y file и принять меры при изменении времени модификации.

Наверное, лучше:

Используйте службу inotify cron, чтобы следить за событиями изменения файлов и запускать действие:

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

Взгляните на incron [1] или другой inotify-материал, чтобы запустить выполнение вашего скрипта.

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

inotify будет правильным способом сделать это. По этому вопросу в некоторых изданиях журнала LinuxForYou есть учебные пособия.

Итак, есть сценарий, который:

1) Проверяет время модификации файла (со stat)
2) Если время модификации новее, чем при последней проверке, оно изменилось.
3) Разберите его и выполните свое действие
4) Еще поспите 1 минуту, а затем повторите попытку

Быстрый и грязный способ:

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

wait_file_changed /tmp/potato