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

Monit не может перезапустить nginx

У меня есть monit, запущенный на сервере Ubuntu 12.04 для мониторинга nginx, но я не могу заставить его снова успешно запустить nginx. Моя настройка такова: файл конфигурации monit:

-rwx------ 1 root root 10329 2015-07-31 09:39 /etc/monit/monitrc

и содержимое (без комментариев) файла monitrc

set daemon  60
set logfile /var/www/apps/myapp/log/monit.log

set httpd port 2812
  use address mysite.com       
  allow username:password 'password'

check system mysite.com
  if loadavg (1min) > 4 then alert
  if loadavg (5min) > 2 then alert
  if memory usage > 75% then alert
  if cpu usage (user) > 70% then alert
  if cpu usage (system) > 30% then alert
  if cpu usage (wait) > 20% then alert

check process nginx with pidfile /opt/nginx/logs/nginx.pid
  start program = "/etc/init.d/nginx restart; touch /var/www/apps/myapp/tmp/restart.txt"
  stop program = "/etc/init.d/nginx stop"

Я начинаю мониторинг с sudo monit.

Если я убью nginx и подожду, пока monit попытается запустить его, я увижу это в файле журнала:

[UTC Jul 31 09:39:26] info     : Reinitializing monit daemon
[UTC Jul 31 09:39:26] info     : Starting monit HTTP server at [mysite.com:2812]
[UTC Jul 31 09:39:26] info     : monit HTTP server started
[UTC Jul 31 09:39:26] info     : 'myhost.mydomain.tld' Monit reloaded
[UTC Jul 31 09:40:26] error    : 'nginx' process is not running
[UTC Jul 31 09:40:26] info     : 'nginx' trying to restart
[UTC Jul 31 09:40:26] info     : 'nginx' start: /etc/init.d/nginx
[UTC Jul 31 09:40:56] error    : 'nginx' failed to start

Когда я сам запускаю команду nginx restart в терминале, она работает нормально:

sudo /etc/init.d/nginx restart; touch /var/www/apps/myapp/tmp/restart.txt

это перезапускает его нормально ( touch команда предназначена для перезагрузки ruby-приложения, которое работает в Passenger - касание файла перезапуска запускает перезапуск приложения.)

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

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

Какие-либо предложения?

monit не принимает сценарии оболочки с start program/stop program. Вам нужно написать так:

check process nginx with pidfile /opt/nginx/logs/nginx.pid
  start program = "/bin/sh -c '/etc/init.d/nginx restart; touch /var/www/apps/myapp/tmp/restart.txt'"
  stop program = "/etc/init.d/nginx stop"