Внедрите в мой существующий скрипт обнаружения ключевых слов функцию, которая будет перепроверять то же самое состояние через заданный период времени - PullRequest
0 голосов
/ 10 июля 2019

У меня есть скрипт, который отслеживает файл журнала для ключевого слова.Как только он обнаружит ключевое слово, он выполнит функцию (отправит электронное письмо с сообщением о том, что сервер выключен / включен).

* отредактировано. Теперь я хочу, чтобы скрипт сообщал о статусе выключения, а затем попытался перезапустить сервер, вызвавсценарий.

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

Я думаю, что мой лучший подход - использовать скрипт:

  1. отслеживать ключевое слово "сервер отключен" (уже всценарий)
  2. обнаружение ключевого слова (уже в сценарии)
  3. пауза на заданный период времени.Скажем, может быть, 5 сек. Пауза - дать серверу полностью отключиться перед попыткой перезапуска.
  4. сообщить о состоянии "сервер выключен" (уже в сценарии)
  5. Выполнить команду, которая запускает(restart.sh) скрипт
  6. отслеживает ключевое слово "сервер вверх" (уже в скрипте)
  7. обнаруживает состояние "сервер включен" (уже в скрипте)
  8. отчет "состояние сервера "вверх" (уже в скрипте)

Так что, я полагаю, достаточно просто сделать паузу после обнаружения состояния down перед вызовом сценария restart.sh

Вот что у меня естьв моем скрипте до сих пор:

tail -fn0 /var/log/user | /usr/bin/gawk '
    /disconnect_tcp_conn/ { report("down") }
    /daemon apps started/  { report("up") }

    function report(curr_state,    msg) {
        if ( prev_state != curr_state ) {
             msg = "%m/%d/%Y %H:%M:%S Server is " curr_state
            system("mail -s \047" msg "\047 mail@gmail.com </dev/null")
            print msg | "cat>&2"
            print strftime(msg) | "tee -a \047/var/log/server_mon.txt\047 >&2"
            prev_state = curr_state
        }
    }

Так что я думаю, что достаточно просто сделать паузу после сообщения о состоянии down перед вызовом сценария restart.sh и следующим ожиданием состояния up перед отчетом.если никогда не произойдет, у меня все равно будет уведомление от оригинала вниз.

Любая помощь будет отличной.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...