LINUX.ORG.RU
ФорумAdmin

bash скрипт.


0

0

Доброе время суток. Сразу к делу. Вот вопрос: Необходимо модифицировать вывод команды grep. вот скрипт tail -f /var/spool/log.log | grep (ERROR|failed)| mail -s "Error" admin@localhost команде mail дабы она отправила письмо необходимо передать завершающие ~. Либо выслушаю любые идеи по реализации данной фишки.


tail -f /var/spool/log.log |awk '/ERROR|failed/ {print $0"\n.\n"}'
Это добавит точку на новой строке, но письмо не уйдет пока mail не получит EOF.

Так что решений я вижу 2:
1. по cron парсить log.log, с учетом предыдущей проверки (запоминать, например, номер строки) и отсылать письмо
2. на perl реализовать простой smtp-client, отсыл. локальному MTA письма по мере поступления /ERROR|failed/

sdio ★★★★★
()

А если так:

tail -f /var/spool/log.log | while read str
do
  echo $str | grep -e "ERROR" -e "failed" >/dev/null && echo $str | mail -s "Error" admin@localhost
done

qwe ★★★
()
Ответ на: комментарий от mDron

>тока в >/dev/null && echo нужно >/dev/null & echo

Да нет, я имел в виду именно && иначе на mail будут сыпаться все строки

qwe ★★★
()
Ответ на: комментарий от mDron

>мдя, рано порадовался. с && он перестает реагировать на дальнейшее появление ошибок

Попробовал, работает. У тебя лог случайно не syslog пишет? Если он, то повторяющиеся за короткое время события он записывает как "last message repeated X times", тогда прибавь к grep еще '-e "repeated"'. Если не syslog, то скорее всего не сбрасываются буфера записи, подожди немного или сделай sync.

qwe ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.