I've got monit up and running on an Ubuntu 12.04 server, to monitor nginx, but I can't get it to successfully start nginx up again. My setup is thus: the monit config file is:
-rwx------ 1 root root 10329 2015-07-31 09:39 /etc/monit/monitrc
and the content (non commented) of the monitrc file is
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"
I'm starting monit with sudo monit
.
If I kill nginx and then wait for monit to try to start it, I see this in the log file:
[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
When I run the nginx restart command myself in the terminal then it works fine:
sudo /etc/init.d/nginx restart; touch /var/www/apps/myapp/tmp/restart.txt
this restarts it fine (the touch
command is to reload a ruby app which is running under Passenger – touching the restart file triggers the restart of the app.)
Taking the touch
command out of the line in the monit config doesn't make any difference. When I try to restart nginx via monit's web interface, that also fails.
I think that if I could somehow get the STDERR and STDOUT streams into the log file as well, when monit tries to start nginx, that would help at least.
Any suggestions?
Best Answer
monit doesn't accept shell scripts with
start program
/stop program
. You need to write like this: