4

Вот более общий вопрос использования.

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

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

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

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

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

E [04 /Mar /2013:15:34:28 -0700] Возврат IPP-ошибки клиента невозможен для Create-Job (ipp://localhost:631 /printers /Hewlett-Packard-HP-LaserJet-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

Кажется, работает, ура.

2 ответа2

5

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

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

Сначала сохраните сценарий, который вы хотите выполнить, в виде файла, например, как cups_monitor.sh в /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 успешно изменен и вызывает ли он ваш скрипт или нет, заглянув в системный журнал (tail /var/log/syslog).

(Мой первый ответ на Stack Exchange! Yippee!)

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .