Чи може сценарій оболонки чекати, коли файл зміниться і вжити заходів?


12

Цікаво, чи можу я написати сценарій, який буде стежити за зміною файлу та виконувати якусь дію, коли зміна буде виявлено.

Детальне пояснення:

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

Якщо модифікація дійсно додається до файлу, повісити на tail -fце, мабуть, найпростіший спосіб. Але лише для додавання.
СФ.

Відповіді:


21

Дешевий "брудний спосіб":

Цикл stat -c %Y fileта вживайте заходів, коли змінюється час модифікації.

Напевно, краще:

Використовуйте послугу inotify cron, щоб слідкувати за подіями модифікації файлів та запускати свої дії:

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

+1 для другого рішення
Майкл Лоуман


2

прищепити це правильний спосіб зробити це. Навчальні посібники наведені в деяких виданнях журналу 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.