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

12

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

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

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

Ответы:

21

Дешевый и грязный способ:

Цикл stat -c %Y fileи принять меры, когда время изменения изменяется.

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

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

/path/to/your/file IN_MODIFY /path/to/your/script $#
Cakemox
источник
+1 за второе решение
Майкл Ловман
2

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

Сухайль Шериф
источник
0

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

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

Рафик Маниар
источник
0

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

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

wait_file_changed /tmp/potato
dctremblay
источник