Завершите работу системы в AWK, которая приводит к бесконечному генерированию действия - PullRequest
0 голосов
/ 10 мая 2019

Я отслеживаю файл журнала для ключевого слова, которое вызовет электронную почту.Проблема в том, что код генерирует электронную почту бесконечно.Я хотел бы получить только одно электронное письмо, даже если есть несколько строк с одним и тем же ключевым словом.

Я попробовал следующее:

'{if(!seen[$1]++)print $1}'

, но я не знаю, как и ГДЕпримените его к существующему коду:

tail -fn0 user | awk '/disconnect_tcp_conn/ { 
    system("mail -s \"Server is down\" mail@gmail.com </dev/null") 
    print "Server is Down"

Желаемый результат - либо завершить все электронные письма после первого отправленного электронного письма, либо завершить электронную почту и мониторинг после того, как первое электронное письмо было отправлено.Я предпочитаю только завершить операцию по электронной почте и продолжить мониторинг, но буду только завершать все.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Если при повторном запуске сервера появляется другое сообщение журнала, вы можете установить переменную, когда увидите сообщение об отключении, и очистить его, когда увидите сообщение о повторном подключении.

tail -fn0 user | awk '
    !server_down && /disconnect_tcp_conn/ { 
        system("mail -s \"Server is down\" mail@gmail.com </dev/null") 
        print "Server is Down"
        server_down = 1 }
    server_down && /reconnect_tcp_conn/ {
        system("mail -s \"Server is up\" mail@gmail.com </dev/null") 
        print "Server is Up"
        server_down = 0 }'


0 голосов
/ 10 мая 2019

Пожалуйста, не принимайте это как ответ, так как это просто дополнение к тому, что написал Бармар, просто чтобы показать альтернативную реализацию без избыточности:

awk '
    /disconnect_tcp_conn/ { report("down") }
    /reconnect_tcp_conn/  { report("up") }

    function report(curr_state,    msg) {
        if ( prev_state != curr_state ) {
            msg = "Server is " curr_state
            system("mail -s \047" msg "\047 mail@gmail.com </dev/null")
            print msg | "cat>&2"
            prev_state = curr_state
        }
    }
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...