Генерация электронной почты с выводом результатов для нескольких фоновых скриптов, работающих на KSH

Сначала немного предыстории: у нас есть 9 серверов JVM, которые выводят файлы журналов, которые я постоянно анализирую, чтобы найти, когда возникает ошибка. Логи перекатываются каждые 5-10 минут, но имя файла не меняется. Я использовал SupperPutty, чтобы открыть 9 сеансов и запустить приведенный ниже сценарий для каждого файла журнала, но это было эффективно только тогда, когда я был на работе.

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind value for HASCHILDREN = 0"

Поэтому я хотел превратить приведенный выше сценарий в фоновый сценарий, который отправлял бы мне электронное письмо при возникновении ошибки. Сначала мне пришлось использовать KSH во второй оболочке, чтобы избежать остановки сценариев при выходе (даже когда я настроил их как NOHUP). Я попытался настроить скрипт, как показано ниже, но он не отправляет мне электронное письмо при возникновении ошибки.

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind value for HASCHILDREN = 0" | mailx -s "Childrens flag has been detected" *email* &

Любая помощь будет принята с благодарностью.


person demonic240    schedule 09.09.2013    source источник


Ответы (3)


Вы можете попытаться запланировать задание cron в файле crontab для вызова скрипта каждые 5-10 минут, который проверяет любые изменения в ваших журналах и отправляет вам электронное письмо, если обнаружена запись об ошибке.

Из документации crontab:

Команда crontab вызывает сеанс редактирования, который позволяет вам создать файл crontab. Вы создаете записи для каждого задания cron в этом файле. Каждая запись должна быть в форме, приемлемой для демона cron. Информацию о создании записей см. в разделе Формат записи файла crontab.

Пример:

Чтобы запустить команду календаря в 6:30 каждый понедельник, среду и пятницу, введите:

    30 6 * * 1,3,5 /usr/bin/calendar

Кроме того, вы можете создать файл crontab, указав параметр File. Если файл существует, он должен быть в формате, ожидаемом демоном cron.

person nay743    schedule 09.09.2013
comment
Я никогда раньше не использовал задание cron, но я посмотрю на это. Существует ли минимальное количество минут между запущенными заданиями? (Я предполагаю, что по крайней мере достаточно долго, чтобы задание завершилось перед повторным запуском) - person demonic240; 09.09.2013
comment
Спасибо. Я могу настроить cronjob для запуска скрипта и отправки мне электронного письма каждые 5 минут. - person demonic240; 10.09.2013

Поэтому я настроил задание cron и сказал ему отправлять по электронной почте мою корпоративную учетную запись электронной почты, но оно отбрасывает выходные данные в мой почтовый ящик unix. Я что-то пропустил?

MAILTO="электронная почта"

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0 ;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR %b]=$0}' b=2 a=4 s="Значение привязки для HASCHILDREN = 0" /maximo/logs/file1 >/dev/null 2>&1

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0 ;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR %b]=$0}' b=2 a=4 s="Значение привязки для HASCHILDREN = 0" /maximo/logs/file2 >/dev/null 2>&1

person demonic240    schedule 09.09.2013

Если вы включите этот '&> /dev/null' для перенаправления ваших заданий cron, вы не получите никакого вывода, и cron ничего не отправит по почте. Я думаю, вам будет проще перенаправить свои задания cron так же, как вы это сделали в первый раз:

    | mailx -s "Childrens flag has been detected" *email*

Правильный синтаксис: MAILTO="user_name", я предлагаю, если вы используете вышеизложенное, также изменить его на MAILTO="" чтобы отключить отчеты по электронной почте из cron, потому что вместо этого вы будете отправлять электронную почту через mailx.

person nay743    schedule 11.09.2013