Назад | Перейти на главную страницу

ошибка синтаксиса monit: «если 5 перезапусков в течение 5 циклов, то предупреждение»

Я пытаюсь получить предупреждение от monit, если не удается перезапустить службу 5 раз, но получаю синтаксическую ошибку

/etc/monit/monit.d/engine.conf:5: Error: syntax error 'alert'

есть идеи, что с этим не так?

/ etc / monit / monitrc:

set daemon  120
set mailserver localhost

set eventqueue
    basedir /var/monit  # set the base directory where events will be stored
    slots 100           # optionaly limit the queue size


set httpd port 2812
  allow localhost

set logfile syslog

set alert root@localhost

include /etc/monit/monit.d/*

/etc/monit/monit.d/engine.conf (единственный файл в monit.d):

check process engine with pidfile /var/run/engine.pid
   group engine
   start program = "/etc/init.d/engine start"
   stop  program = "/etc/init.d/engine stop"
   if 5 restarts within 5 cycles then alert

версия:

# monit -V
This is monit version 4.10.1

Похоже, поддержка этого была добавлена ​​в monit 5.1
Из журнала изменений на http://mmonit.com/monit/dist/CHANGES.txt :

Version 5.1

NEW FEATURES AND FUNCTIONS:

It is now possible to define any action for the restart timeout rule.
  Multiple restart timeout rules can also be defined. Example:
  if 3 restarts within 5 cycles then exec "/foo/bar"
  if 8 restarts within 10 cycles then unmonitor

Я пытался использовать тот же синтаксис, что и вы (по той же причине), и обнаружил, что он работает на одном сервере, а на другом. Когда я сравнивал версии, я обнаружил, что одна была 5.2.5, а другая - 4.10.1.

Так что ответ, похоже, - обновить как минимум до 5.1

Думаю, выглядит нормально. Вы пробовали повторно набрать эту строку, чтобы исключить любые скрытые символы, которые испортили строку?

Вы получили set alert <email_address> определены до этой конфигурации?

Хорошо, обнаружил ошибку. alert не является допустимым событием, и вам необходимо указать событие, которое будет генерировать предупреждение. Без конкретного события monit не знал бы, что вам сказать.

Список событий с man-страницы:

Это список событий, которые вы можете использовать в почтовом фильтре: uid, gid, size, nonexist, data, icmp, instance, invalid, exec, changed, timeout, resource, контрольная сумма, совпадение, отметка времени, соединение, разрешение

В вашем случае я бы рекомендовал exec. Полный список сообщений:

    Event:    | Failure state:          | Recovery state:
    ---------------------------------------------------------------
    CHANGED   | "Changed"               | "Changed back"
    CHECKSUM  | "Checksum failed"       | "Checksum passed"
    CONNECTION| "Connection failed"     | "Connection passed"
    DATA      | "Data access error"     | "Data access succeeded"
    EXEC      | "Execution failed"      | "Execution succeeded"
    GID       | "GID failed"            | "GID passed"
    ICMP      | "ICMP failed"           | "ICMP passed"
    INSTANCE  | "Monit instance changed"| "Monit instance changed not"
    INVALID   | "Invalid type"          | "Type passed"
    MATCH     | "Regex match"           | "No regex match"
    NONEXIST  | "Does not exist"        | "Exists"
    PERMISSION| "Permission failed"     | "Permission passed"
    RESOURCE  | "Resource limit matched"| "Resource limit passed"
    SIZE      | "Size failed"           | "Size passed"
    TIMEOUT   | "Timeout"               | "Timeout recovery"
    TIMESTAMP | "Timestamp failed"      | "Timestamp passed"
    UID       | "UID failed"            | "UID passed"

Удачи,
Жуан Мигель Невеш

Я заметил что-то странное с параметрами alert и unmonitor в monit 5.4-2: если вы используете параметр unmonitor в строке конфигурации предупреждения, он генерирует синтаксическую ошибку:

alert security@foo.bar on { uid, gid, unmonitor
    } with the mail-format { subject: Alarm! }

При перезапуске monit вы получаете:

Error: syntax error 'unmonitor'

Я решил эту проблему, удалив unmonitor в аргументах:

alert security@foo.bar on { uid, gid
    } with the mail-format { subject: Alarm! }

Я не вижу изменения синтаксиса ... Странно ... Не правда ли?