Я пытаюсь получить предупреждение от 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! }
Я не вижу изменения синтаксиса ... Странно ... Не правда ли?