Назад | Перейти на главную страницу

Новая запись в журнале -> почтовое уведомление

Я ищу сценарий (bash / perl / python), который uppon вызывает cron каждые 5 секунд, он проверяет, были ли добавлены новые строки в мои конкретные файлы журнала. Если есть какие-либо новые строки, сценарий должен отправить в корневой каталог уведомление, содержащее событие журнала.

Есть ли способ сделать это?

Вы можете попробовать Тенши. Он написан на Perl, очень прост в настройке и выполняет именно то, что вы просили. Из описания пакета Ubuntu:

«Tenshi - это программа мониторинга журналов, предназначенная для отслеживания в одном или нескольких файлах журналов строк, соответствующих определенным пользователем регулярным выражениям, и отчета о совпадениях. Регулярные выражения назначаются очередям, которые имеют интервал оповещения и список получателей почты».

Пакет Ubuntu (Ссылка на сайт), Пакет Debian (Ссылка на сайт).

Это можно сделать с помощью сценария bash, который выполняет следующие задачи:

  1. Обеспечьте фоновый процесс мониторинга каждого файла журнала с помощью tail -f, записывая вывод в буфер.
  2. Регулярно собирайте урожай, действуйте и сокращайте буферную локацию.

Я бы использовал один сценарий, возможно, запускаемый как сценарий инициализации, а не задание cron. Например:

#!/bin/bash

RECIPIENT=root
SUBJECT="Log monitor"
PERIOD=5    # Harvest log buffer every PERIOD seconds

# Prepare the log buffer and ensure it is empty
LOGBUFFER=/tmp/logbuffer.$$
cp /dev/null $LOGBUFFER

# Monitor the log files in the background.
# More than one log file can be specified on the command line.
for file in "$@"; do
    tail -f -n0 "$file" | while read line;do echo "$file: $line";done >> $LOGBUFFER &
done

# Harvest the log buffer
while :;do
    if [ -s $LOGBUFFER ]; then
        mail -t "$RECIPIENT" -s "$SUBJECT" < $LOGBUFFER
        cp /dev/null $LOGBUFFER
    fi
    sleep $PERIOD
done

Скрипт не идеален (например, он оставит /tmp/logbuffer.123 файл валяется, когда он выходит), но он должен помочь вам начать.

Если вы рассматриваете возможность перехода на использование syslog-ng, вы можете настроить его для автоматического запуска сценария оболочки, который может запускать электронное письмо на основе шаблона сообщения syslog. У меня есть это для регистрации безопасности.

звонок по cron каждые 5 секунд

Cron не имеет детализации меньше минут. Если вам нужна такая степень детализации, вам понадобится incrond. Просто есть что-то вроде:

/var/log IN_CLOSE_WRITE /usr/local/sbin/notify.sh $@/$#

и сценарий, который отправит вам по почте:

tail $1 | mail -s "New lines in: $1" root

Возможно, вам придется поиграть с нужными событиями. Но это избавит от необходимости запускать сценарий по времени. Если у вас правильно настроен incrontab, вы можете быть уверены, что при запуске скрипта что-то изменится.