2013-09-10 1 views
2

Я смог получить мой скрипт, чтобы успешно отправлять мне по электронной почте через регулярные промежутки времени с помощью другого пользователя здесь. Мой следующий вопрос: я бы хотел, чтобы он ТОЛЬКО посылал мне по электронной почте, если вывод не равен нулю.Предотвращение отправки электронной почты, если nawk возвращает null

У меня есть nawk, настроенный для отправки мне по электронной почте вывода, и сценарий настроен на запуск каждые 5 минут через crontab. Из-за количества файлов журнала это означало бы, что я получаю 9 писем каждые 5 минут, которые взорвали бы мой почтовый ящик.

Текущий сценарий:

nawk '$0~s{for(c=NR-b;c<=NR+a;c++)r[c]=1}{q[NR]=$0}END{for(c=1;c<=NR;c++)if(r[c])print q[c]}' b=4 a=4 s="Bind value for HASCHILDREN = 0" filename | mail -s "Output from crontask" myemail 

Текущий кронтаб:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/me/crontask 
+1

Может быть некоторый «расширенный» синтаксис, который вы можете применить, но простым решением является перенаправление вывода nawk в tmp-файл, затем используйте 'if [[-s tmpFile]]; затем mailx -S ... user1 @ mycomp.com, usr2 @ xyz.com shellter

+0

Так что я бы добавил «>/home/me/crontmp» в конец скрипта nawk вместо отправки электронной почты. И затем на второй строке добавьте «if [[-s/home/me/crontmp]], затем отправьте сообщение« Выходной тест »[email protected] demonic240

+0

вот что я попробую, хотя решение Гленна Джекмана (как обычно) отлично тоже. Удачи! – shellter

ответ

1

Для того, чтобы проверить вывод команды nawk, вам необходимо сохранить его где-нибудь. Я бы рекомендовал использовать переменную:

output=$(
    nawk ' 
     $0 ~ s {for (c=NR-b; c<=NR+a; c++) r[c]=1} 
     {q[NR] = $0} 
     END {for (c=1; c<=NR; c++) if (r[c]) print q[c]} 
    ' b=4 a=4 s="Bind value for HASCHILDREN = 0" filename 
) 
[[ "$output" ]] && mail -s "Output from crontask" [email protected] <<< "$output" 

Я предполагаю, что ваша оболочка - это bash.

+0

Наша оболочка - KSH. Я должен был упомянуть об этом раньше. – demonic240

0

Использование совета Shelter. Я смог вывести результаты во временный файл, а затем запустил его оператор if/then, чтобы отправить его самому себе, если он не был нулевым. Я подтвердил, что теперь он работает.