Запретить отправку электронной почты, если 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

Текущий crontab:

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

2 ответа

Чтобы проверить вывод команды 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" me@example.com <<< "$output"

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

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

Другие вопросы по тегам