Linux: оповещение пользователя при изменении файла

вот более общий вопрос.

как я могу отслеживать файл журнала для конкретных изменений и использовать оповещение" уведомлять-отправлять " в Ubuntu, чтобы предупредить, когда происходят указанные изменения?

ОРИГИНАЛЬНЫЙ ВОПРОС:

Я пытаюсь настроить квоты печати для принтеров в офисе.
Тем не менее, он появляется, когда квота исчерпана, то печатать просто не получается
молча, и пользователь понятия не имеет, что происходит.

квота страницы устанавливается путем изменения директивы PageLimit в
/ etc / cups / printers.conf

похоже, я получаю сообщение

E [04 / Mar/2013:15:34:28 -0700] возврат клиента IPP-ошибка-невозможно
для создания задания
(протокол IPP://имя localhost:631/принтеры/Хьюлетт-Паккард НР-принтер-4100-МФУ)
с localhost

в моем журнале в /var/log/cups / error_log .

Я пытался взломать что-то вместе через команду

`tail -f /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job' DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Printing Quota reached for this Printer'`

но это, кажется, на самом деле не работает, как он только отображает сообщение
один раз на первое сообщение об ошибке.

какие-то мысли или решения? Это действительно кажется, что должно быть
обожженных решение для этого.

решение

incrontab работал отлично.

sudo apt-get install incrontab

Добавить пользователя root в /etc/incron.allow

sudo nano /etc/incron.allow

создать скрипт monitorCUPSlog.sh

#!/bin/bash
tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible' | DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Daily Print Quota exceeded for this printer'

и, наконец, добавьте событие в таблицу incrontab

sudo incrontab -e
/var/log/cups/error_log IN_MODIFY /usr/local/bin/monitorCUPSlog.sh

кажется, работает.

8
задан An Dorfer
11.11.2022 18:39 Количество просмотров материала 2946
Распечатать страницу

2 ответа

Я хотел бы взглянуть на использование incrontab для мониторинга изменений в файловой системе, и объедините это с небольшой скрипт у вас уже есть.

это выглядит примерно следующим образом.

во-первых, сохраните скрипт, который вы хотите выполнить, как файл, например, как cups_monitor.sh in /usr/local/bin (не забудьте сделать его исполняемым).

#!/bin/sh
VAR=`tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job'`
if [[ -n "$VAR" ]]; then
   echo "$VAR" | DISPLAY=:0 notify-send -t 30000 -i
fi

вы можете проверить это. Мои сценарии никогда не бывают правильными с первой попытки :). Также обратите внимание, что возможно, что этот сценарий не захватывает сообщение об ошибке, если за ним следует другое сообщение: Я смотрю только на последнюю строку файла журнала (-n 1); это должно быть легко изменить.

затем отредактируйте файл incrontab

incrontab -e

добавить строку

/var/log/cups/error_log IN_CLOSE_WRITE /usr/local/bin/cups_monitor.sh

на IN_CLOSE_WRITE называется "символ события" и указывает, что вы хотите, чтобы вызвать сценарий, когда/var/log/cups/error_log был закрыт после того, как был открыт для записи; вы можете найти другие события в справочной странице incrontab.

имейте в виду, что я не проверить это. Вы можете видеть, был ли файл incrontab изменен успешно и вызывает ли он ваш сценарий или нет, посмотрев в syslog (tail /var/log/syslog).

(мой первый ответ на Stack Exchange когда-либо! Ура!)

5
отвечен Semafoor 2022-11-13 02:27

можно использовать incron:: inotify чтобы прикрепить настроенные триггеры к файлам, которые делают такие вещи, как записи в файле журнала или отправляют электронные письма при событиях изменения.

0
отвечен amphibient 2022-11-13 04:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх