Запись файлов 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 минут?

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} 
  • Показывать только текст между двумя шаблонами соответствия
  • Заменить многострочную строку в файлах
  • как удалить двойные кавычки в csv
  • Как использовать соответствующее регулярное выражение для поиска шаблона в sed?
  • Как написать сценарий sed для удаления чисел из строки?
  • Удалить последнюю строку из файла
  • Действительно ли sed \ {x, y \} диапазон жадный?
  • Удалите только запятые, присутствующие в двойных кавычках
  • SED Вопрос о замене
  • Сопоставьте текущую строку до строки, которая не соответствует шаблону
  • Есть ли способ использовать апострофы в командах sed?
  • Используйте awk / sed, чтобы удалить все, кроме шаблона соответствия в определенном столбце
  • Interesting Posts

    как предотвратить расширение псевдонимов `eval` до произвольного псевдонима и сохранить бесконечную защиту цикла от функции?

    Как создать фальшивый файл устройства, который принимает входные данные из программы C?

    Как подключиться к ssh-серверу, запущенному на встроенном Linux, без / etc / passwd?

    Почему технология VirtualBox Bridged медленная

    Почему мой массив bash всегда имеет длину 1, когда я разделяю?

    Несколько загрузок: Windows-10 по Linux?

    Выполнить файл, если команда не найдена

    Выполнение приложений сохраняется при закрытии (например, в Mac OS X) в Linux

    Почтовые журналы Postfix продолжают показывать, что «домен NIS не установлен»

    В Mac OS X Snow Leopard, как можно разрешить разрешения одного файла другому?

    ZFS на Linux и Amazon EC2

    Грепинг по огромной производительности файла

    хранить последний файл каждого месяца и удалять остальные

    Несоответствие версии клиента базы данных в PhpMyAdmin

    shell: Оператор = ~ не работает должным образом

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