2015-01-02 3 views
1

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

У кого-нибудь есть обходной способ перезагрузки nginx, а не перезапуск?

Редактировать - Я должен был указать, что мне по-прежнему требуется перезапуск nginx, но при определенных условиях мне также необходимо перезагрузить nginx.

Примером может быть, что если nginx идет вниз, его необходимо перезапустить, но если он имеет время безотказной работы> 3 дня (например), его необходимо перезагрузить.

Я пытаюсь добиться этого: https://mmonit.com/monit/documentation/monit.html#UPTIME-TESTING

... но с Nginx перевалкой, не перезапускается.

Спасибо.

ответ

1

Я решил эту проблему с помощью команды exec, когда мои условия. Например:

check system localhost 
    if memory > 95% 
    for 4 cycles 
    then exec "/etc/init.d/nginx reload" 

Я обнаружил, что Nginx проблемы с памятью могут быть решены в краткосрочной перспективе за счет перегрузки, а не перезапуску.

0

Вы можете передать сигнал перезагрузки, который должен сделать эту работу: «! Используйте документы Лука»

nginx -s reload 
+0

Спасибо за ваш ответ. Я отредактировал свой вопрос, потому что не указал, что мне нужно перезагрузить, а также перезапустить. – Vimchester

0

Согласно документации, отправка сигнала HUP заставит nginx перечитать его конфигурационный файл (ы), проверить его и применить новую конфигурацию.

Смотрите подробности: http://nginx.org/en/docs/control.html#reconfiguration

+0

Спасибо. Я думаю, что то, что мне действительно нужно, - это включить это в Монит. Я знаю, как перезагрузить nginx, но не автоматически через Monit. Я действительно хочу достичь этого http://mmonit.com/monit/documentation/monit.html#PROCESS-UPTIME-TESTING, но с перезагрузкой, а не с перезагрузкой. Я обновлю этот вопрос, чтобы отразить это. – Vimchester

+0

Кажется, что вы просите неправильного совета - перезагрузка nginx обычно выполняется после изменения конфигурации, в то время как monit предназначен для проверки действующего \ nginx действия. Если monit обнаружит сбой nginx - вы должны перезапустить его, а не перезагружать его конфигурацию. –

0

Вот конфиг, который будет достичь того, чего вы хотите:

check process nginx with pidfile /usr/local/var/run/nginx.pid 
    start program = "/usr/local/bin/nginx -s start" 
    stop program = "/usr/local/bin/nginx -s stop" 
    if uptime > 3 days then exec "/usr/local/bin/nginx -s reload" 

Я попробовал это на моей конфигурации. Единственная проблема, которую я вижу, это то, что Монит предполагает, что вы определяете условие ошибки при проверке времени безотказной работы, как это. Команда nginx -s reload, как я вижу на моей машине, не перезагружает время работы до 0. Поскольку Monit считает, что время безотказной работы> 3 дня - это условие ошибки, которое исправляется командой, которую вы даете в конфиге, но что команда не сбрасывает время безотказной работы, чтобы быть менее 3-х дней, монят сообщит Uptime failed как статус процесса, и вы увидите это в журналах:

error : 'nginx' uptime test failed for /usr/local/var/run/nginx.pid -- current uptime is 792808 seconds 

вы увидите сотни этих , на самом деле (моя конфигурация работает Monit каждые 30 секунд, поэтому я получаю один из них каждые 30 секунд).

Один вопрос: я не уверен, что reload ing nginx после долгого времени, как и 3 дня, сделают для него - полезно ли это сделать для nginx? Если у вас есть ссылка на информацию о том, почему это было бы полезно для nginx, это может помочь другим читателям попасть на эту страницу через поиск. Может быть, вы согласились с ответом, который вы сделали, потому что видели, что было бы разумно делать это, когда есть проблема, например, высокая память?

(старый пост, я знаю, но я попал сюда через Google и увидел, что принятый ответ был неполным, а также не полностью понимает намерение OP).

EDIT: а, я вижу, вы приняли свой собственный ответ. Виноват. Кажется, вы действительно видели, что было бессмысленно делать то, что вы изначально задавали, и вместо этого выбрали проверку памяти! Я оставлю свой пост, чтобы дать эту ясность другим читателям с той же путаницей.