2016-10-25 10 views
0

У меня есть процесс, который я контролирую с помощью Monit. Если процесс по какой-то причине умирает, я хочу отправить уведомление Slack с помощью сценария оболочки и перезапустить его. Такое поведение, хотя и не работает с директивой «не существует». Последний выполняется и предыдущий игнорируется. Например, код ниже:Второй «Не существует» Монита первый переопределяет

check process xyz with pidfile /var/run/xyz.pid 
    start program = "/etc/init.d/xyz start" with timeout 60 seconds 
    stop program = "/etc/init.d/xyz stop" 
    if does not exist then restart 
    if does not exist then exec "/opt/somescript.sh" 

Выполняет скрипт, но не перезагружается. это также похоже на документацию, что так оно и будет. Любой другой способ заставить это работать. Дополнительная документация (не совсем понятно, но напоминает реальное поведение):

If not defined, it defaults to a restart action. 
You can override the default action with the following statement: 

ответ

0

Моя догадка это действие по умолчанию, уже перезапустить процесс, согласно документации, и вы переопределение, что с exec действием

Чистый способ - добавить скрипт перезагрузки в ваш somescript.sh.

Если вы не хотите, чтобы сделать это, вы можете также объединить два действия в одном, как это:

if does not exist then exec "/etc/init.d/xyz restart && /opt/somescript.sh" 
+0

Извините, но это только опечатка с моей стороны при вводе вопроса, исправлено сейчас –

+0

О, я вижу. Я обновил ответ, возможно, лучше всего включить перезапуск и скрипт в 1 действие. – Ulugbek

+0

по какой-то странной причине, даже если я вызываю две команды в exec, разделенные && - она ​​вызывает только первую. Я проверил это, изменив места, но всегда вызывается только одна команда! –

0

Я считаю, монит не позволяет иметь одни и те же заявления дважды. Вам нужно будет написать свой скрипт для перезапуска процесса в своем somescript.sh.