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

Отправить электронное письмо на основе результатов grep

я использую WebInject (CLI, а не GUI) для тестирования онлайн-веб-сервисов. Я собирался пойти с третьей стороной, пока не найду этот маленький драгоценный камень и не пойму, что я могу спасти ...

Я хочу выполнить поиск результатов WebInject (сценарий Perl). Если он найдет шаблон, то отправьте результаты по почте. Я новичок в этом и не совсем уверен, как написать логику для оценки результатов и отправки их по почте.

Вот что у меня есть на данный момент:

$ perl webinject.pl | grep 'ТЕСТОВЫЙ СЛУЧАЙ НЕ ПРОШЕЛ'

Я хочу отправить электронное письмо только в том случае, если grep найдет совпадение, иначе электронное письмо не будет отправлено. Я хотел бы настроить это с помощью cron для работы с интервалом в 10 или 15 минут.

В качестве примечания, может ли grep захватывать начальные и конечные символы из соответствующего шаблона?

ОБНОВЛЕНИЕ 1: выяснил начальные и конечные строки (-A # -B #)

Огромное спасибо!

Вот однострочный, который должен работать:

perl webinject.pl | grep 'TEST CASE FAILED' 2>&1 > /tmp/grep.log && /usr/bin/mail -s "grep found something" root@example.org < /tmp/grep.log

Вот более общий случай с несколькими командами:

{ COMMAND1 ; COMMAND2 |grep 'your string here' ; } 2>&1 > /tmp/logfile && /usr/bin/mail -s "$SUBJECT" $MAILTO < /tmp/logfile

Код после && активируется только в том случае, если команда в фигурных скобках находит совпадение (код возврата равен нулю, что означает успех). Я использую 2> & 1, чтобы не пропустить ни одного вывода.

Вы также можете вывести эту информацию в системный журнал. Видеть Лучше ведение журнала для cronjobs? Отправить вывод cron в системный журнал?

Взгляните на этот ответ эхо на основе результата grep
Это почти то же самое, возьмите ответ, который лучше соответствует вашим потребностям, затем подавите часть echo No и замените часть echo yes командой электронной почты

Для ввода начальных и конечных символов вы можете использовать параметры -C или -A и -B (-C - это -A X -B X)

   -A NUM, --after-context=NUM
          Print NUM lines of trailing context after matching lines.  Places a line containing -- between contiguous groups of matches.


   -B NUM, --before-context=NUM
          Print NUM lines of leading context before matching lines.  Places a line containing -- between contiguous groups of matches.

   -C NUM, --context=NUM
          Print NUM lines of output context.  Places a line containing -- between contiguous groups of matches.

если я понимаю, что вы хотите сделать, вам может понравиться следующий пример

perl webinject.pl > /tmp/webinject_result.txt
if grep --quiet 'TEST CASE FAILED' /tmp/webinject_result.txt;
then
  grep -B 20 -B 2 'TEST CASE FAILED' /tmp/webinject_result.txt | mail someone@domain.tld
fi