Запись файлов grep за последние 30 минут

Я создаю сценарий, который будет отправлять сообщения об ошибках / предупреждения из журнала. Я хотел бы, чтобы это отправлялось каждые полчаса, но я хочу отправить его только в том случае, если есть новая запись. Как бы я проглотил только последние полчаса ошибок?

Метка времени в журнале имеет следующий формат.

<1 августа 2016 года 2:15:29 PM MDT> <Сведения об ошибке …..>

Скрипт пока:

#!/bin/bash cat /var/log/logfile.log | egrep -i "error|warning" | tee -a /tmp/log.tmp "get only last 30 min of errors" | mail -s "Errors/Warning" user@email.com 

Можно ли преобразовать отметки времени (1 августа 2016 года 2:15:29 PM MDT) в эпоху, затем сравнить ее с текущей эпохой или есть ли способ с sed / awk / perl получить последние 30 минут?

  • Извлечение текста с помощью sed не работает должным образом
  • Уменьшить использование файлов в текстовой обработке
  • чтение из файла и изменение его шаблона в массив?
  • Измените /etc/lvm/lvm.conf и добавьте новый глобальный фильтр
  • Как сортировать и присоединяться в соответствии с номером / счетчиком внутри файла?
  • выходное содержание во втором случае
  • Grep с диапазоном и пропускает три фильтра
  • Составляет ли sed запись в файл или дает образец вывода
  • 3 Solutions collect form web for “Запись файлов grep за последние 30 минут”

    Для перехода в эпоху вы можете использовать следующую инструкцию:

     # date +%s -d"Aug 1, 2016 2:15:29 PM MDT" 1470082529 

    Для конвертируемой эпохи в UTC вы можете использовать:

     # date -d @1470082529 Tue Aug 2 00:45:29 IRDT 2016 #### on Linux Box # date -r 1470082529 Tue Aug 2 00:45:29 IRDT 2016 ###on BSD box 

    Я бы использовал perlFile::Tail . У меня нет времени, чтобы написать пример сейчас, но в perlish псевдокоде он будет выглядеть примерно так:

     #! /usr/bin/not-actually-perl use strict; use File::Tail; use Net::SMTP or Mail::Mailer or one of the squillion other perl mail sending modules; open a File::Tail file handle to your log file my $now=time(); my @lines = (); while (read the File::Tail handle) { push @lines, $_; if (time() > ($now + 1800 seconds) ) { $now=time(); email the @lines array to you@your.address; @lines=(); } } на #! /usr/bin/not-actually-perl use strict; use File::Tail; use Net::SMTP or Mail::Mailer or one of the squillion other perl mail sending modules; open a File::Tail file handle to your log file my $now=time(); my @lines = (); while (read the File::Tail handle) { push @lines, $_; if (time() > ($now + 1800 seconds) ) { $now=time(); email the @lines array to you@your.address; @lines=(); } } в #! /usr/bin/not-actually-perl use strict; use File::Tail; use Net::SMTP or Mail::Mailer or one of the squillion other perl mail sending modules; open a File::Tail file handle to your log file my $now=time(); my @lines = (); while (read the File::Tail handle) { push @lines, $_; if (time() > ($now + 1800 seconds) ) { $now=time(); email the @lines array to you@your.address; @lines=(); } } 

    Фактический рабочий сценарий, вероятно, будет меньше, чем на 10 строк дольше, чем указано выше, и большая часть из них будет настраивать заголовки для электронной почты.

    и еще несколько строк, чтобы поймать различные сигналы, чтобы отправить по электронной почте то, что у него есть в @lines, перед тем, как приостановить или выйти из игры.

    См. Справочные страницы для File::Tail и Net::SMTP (или что-то еще) для получения точных сведений.

    Отличные идеи, самое простое предложение @MelBurslan для разграничения файлов.

     #!/bin/sh MAILTO=user@email.com OFILE=/var/tmp/alerts.tmp LOG30=/var/tmp/LOG30 LOGNOW=/var/tmp/LOGNOW HOST=`hostname` # setup file if [ -f ${OFILE} ]; then cat /dev/null > ${OFILE} else touch ${OFILE} fi cat /var/log/logfile.log | egrep -i "error|warning" | tee -a ${LOGNOW} diff ${LOG30} ${LOGNOW} | tee -a ${OFILE} if [ -f ${OFILE} ]; then echo "Errors" | cat - ${OFILE} > temp && mv temp ${OFILE} mailx -r root@server.com -s "Errors" ${MAILTO} < ${OFILE} fi rm ${LOG30} mv ${LOGNOW} /var/tmp/LOG30 rm ${OFILE} 
    Interesting Posts

    Обновление yum repo в RHEL 7 с Ansible

    Устранение неполадок: в каком файле содержится ошибка?

    Что определяет, где отображаются сообщения TTY и загрузочные сообщения?

    Исполняемые файлы показывают с символом * рядом с их именем в выводе ls

    Как я могу предварительно настроить беспроводную сеть, которую я еще не видел?

    Создание перестановок в списке слов из существующих файлов

    SSH, поврежденный при подключении к VPN при обновлении с Ubuntu 13.04 до 14.04

    Разблокируйте зашифрованные тома после перезапуска сервера через SSH

    tar: параметр требует аргумента – 'f'

    Запуск «make test» на отдельном модуле для сборки Python 2.7.4

    Показывать сообщение, когда cd в определенный каталог

    используйте 'find' для поиска каталогов !, содержащих определенный filetype foo

    Перезапуск процесса через cron каждые 12 часов

    Исправить команду, когда она случайно имела завершающую одиночную кавычку?

    Расширение параметра в grep

    Linux и Unix - лучшая ОС в мире.