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


12

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

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

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

В случае, если модификация фактически добавляется к файлу, tail -fвероятно, самый простой способ это сделать. Но только для добавления.
SF.

Ответы:


21

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

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

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

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

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

+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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.