Monit newbie problem

Hi,

I tried to make monit up on my server to manage ruby on rails
application.
I have some problem when i try to start monit :

[root@seb seb]# /usr/local/bin/monit start all
‘mongrel_rails_3003’ start: /usr/bin/ruby
‘mongrel_rails_3003’ failed to start

[root@seb seb]# monit status
monit: no status available – the monit daemon is not running

my monitrc file is in /usr/local/src/monitrc :


set daemon 30
set logfile /var/log/monit.log
set mailserver 127.0.0.1
set mail-format {from:[email protected]}
set alert [email protected] only on {timeout, nonexist}
set httpd port 4000
include /home/seb/watchdog/*

my application config file in /home/seb/watchdog/ :


check process mongrel_rails_3003
with pidfile /var/run/mongrel/mongrel.3003.pid
start program = “/usr/bin/ruby /usr/bin/mongrel_rails
cluster::start -C
/home/seb/railsproject/cpericard/config/mongrel_cluster.yml --clean
–only 3003”
stop program = “/usr/bin/ruby /usr/bin/mongrel_rails
cluster::stop -C
/home/seb/railsproject/cpericard/config/mongrel_cluster.yml --only 3003”
if totalmem > 100.0 MB for 5 cycles then restart
if failed host 127.0.0.1 port 3003 protocol http with timeout 10 seconds
then restart

The mongrel process start but monit daemon is not running.

What’s wrong with my configuration ?

Thanks a lot for your help !

Frioffol F. wrote:

Hi,

I tried to make monit up on my server to manage ruby on rails
application.
I have some problem when i try to start monit :

Hi,
What do you get when you run:

/usr/local/bin/monit -t -c /usr/local/src/monitrc

Daniel

Daniel B. wrote:

Frioffol F. wrote:

Hi,

I tried to make monit up on my server to manage ruby on rails
application.
I have some problem when i try to start monit :

Hi,
What do you get when you run:

/usr/local/bin/monit -t -c /usr/local/src/monitrc

Daniel

[root@seb cpericard]# /usr/local/bin/monit -t -c /usr/local/etc/monitrc
Control file syntax OK

I’m not sure you need to include the ‘/usr/bin/ruby’ in your start
program. The following setup works for me:

check process mongrel-8007 with pidfile /var/zena/current/log/mongrel.
8007.pid
start program = “/var/lib/gems/1.8/bin/mongrel_rails start -d -e
production -p 8007 -a 127.0.0.1 -P log/mongrel.8007.pid -c /var/zena/
current” --user www-data --group www-data
stop program = “/var/lib/gems/1.8/bin/mongrel_rails stop -P log/
mongrel.8007.pid -c /var/zena/current”

Gaspard

Monit does NOT get the normal path information that a regular user on
the server would get so you have to be VERY specific in you
configuration files. Some times the best solution is to create a
startup script that you call from monit…

script:
#!/bin/bash

Get the port number

PORT=$2

Set the initial path

export PATH=${PATH}:/usr/bin:/usr/local/bin
start () { mongrel_rails cluster::start --config $CONFIG_FILE --clean
–only $PORT }
stop () { mongrel_rails cluster::stop --config $CONFIG_FILE --clean –
only $PORT --force }
case $1 in
start)
start
;;
stop)
stop
;;
*)
echo $“Usage: $0 {start|stop} port”
exit 1
;;
esac
exit 0

Now you can call it from monit like this:

start program = “/usr/local/bin/script.sh start 8000”
stop program = “/usr/local/bin/script.sh stop 8000”

Try running your start program without any environment variables (as
it is probably run by monit):

env -i /usr/bin/mongrel_rails start -d -e development -p 3003 -a

127.0.0.1 -P /home/seb/railsproject/cpericard/log/mongrel.3003.pid -c /
home/seb/railsproject/cpericard

Make sure “which mongrel_rails” gives
/usr/bin/mongrel_rails

I had to use (debian)
/var/lib/gems/1.8/bin/mongrel_rails

Gaspard

Gaspard B. wrote:

I’m not sure you need to include the ‘/usr/bin/ruby’ in your start
program. The following setup works for me:

check process mongrel-8007 with pidfile /var/zena/current/log/mongrel.
8007.pid
start program = “/var/lib/gems/1.8/bin/mongrel_rails start -d -e
production -p 8007 -a 127.0.0.1 -P log/mongrel.8007.pid -c /var/zena/
current” --user www-data --group www-data
stop program = “/var/lib/gems/1.8/bin/mongrel_rails stop -P log/
mongrel.8007.pid -c /var/zena/current”

Gaspard

i have updated my monitrc file :


set daemon 60

set httpd port 2812 and
use address 127.0.0.1
allow 127.0.0.1

check process mongrel-3003 with pidfile
/home/seb/railsproject/cpericard/log/mongrel.3003.pid
start program = “/usr/bin/mongrel_rails start -d -e development -p
3003 -a 127.0.0.1 -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railsproject/cpericard”
stop program = “/usr/bin/mongrel_rails stop -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railspoject/cpericard”
group mongrel

when i try to start monit :

[root@seb cpericard]# /usr/local/bin/monit start all
‘mongrel-3003’ start: /usr/bin/mongrel_rails
‘mongrel-3003’ failed to start

monit daemon is not starting but mongrel is working !

Gaspard B. wrote:

Try running your start program without any environment variables (as
it is probably run by monit):

env -i /usr/bin/mongrel_rails start -d -e development -p 3003 -a

127.0.0.1 -P /home/seb/railsproject/cpericard/log/mongrel.3003.pid -c /
home/seb/railsproject/cpericard

Make sure “which mongrel_rails” gives
/usr/bin/mongrel_rails

I had to use (debian)
/var/lib/gems/1.8/bin/mongrel_rails

Gaspard

that’s better, monit is starting but … not my rails app

my monitrc file :


set daemon 60

set httpd port 2812 and
use address 127.0.0.1
allow 127.0.0.1

check process mongrel-3003 with pidfile
/home/seb/railsproject/cpericard/log/mongrel.3003.pid
start program = “/bin/env -i /usr/bin/mongrel_rails start -d -e
development -p 3003 -a 127.0.0.1 -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railsproject/cpericard”
stop program = “/bin/env -i /usr/bin/mongrel_rails stop -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railsproject/cpericard”
group mongrel

[root@seb cpericard]# which mongrel_rails
/usr/bin/mongrel_rails
[root@seb cpericard]# /usr/local/bin/monit
Starting monit daemon with http interface at [127.0.0.1:2812]
[root@seb cpericard]# monit status
The monit daemon 4.10.1 uptime: 0m

Process ‘mongrel-3003’
status Execution failed
monitoring status monitored
data collected Tue Oct 7 17:16:52 2008

System ‘seb’
status Monit instance changed
monitoring status monitored
load average [0.04] [0.07] [0.08]
cpu 0.0%us 0.0%sy 0.0%wa
memory usage 399392 kB [77.6%]
data collected Tue Oct 7 17:16:52 2008

Gaspard B. wrote:

You misunderstood me. Try running your command * in the shell *
to test it first. You also get any error messages. So you should type:

env -i /usr/bin/mongrel_rails start -d -e development -p 3003 -a

127.0.0.1 -P /home/seb/railsproject/cpericard/log/mongrel.3003.pid -c /
home/seb/railsproject/cpericard

and see how it works.

Setting “env -i” in the shell reproduces the environment used in
monit, so it lets you test your command as if it was run by monit.

Gaspard

sorry ! and thanks for your help gaspard

i tried this command and mongrel is starting.

You misunderstood me. Try running your command * in the shell *
to test it first. You also get any error messages. So you should type:

env -i /usr/bin/mongrel_rails start -d -e development -p 3003 -a

127.0.0.1 -P /home/seb/railsproject/cpericard/log/mongrel.3003.pid -c /
home/seb/railsproject/cpericard

and see how it works.

Setting “env -i” in the shell reproduces the environment used in
monit, so it lets you test your command as if it was run by monit.

Gaspard

Frioffol F. wrote:

Gaspard B. wrote:

You misunderstood me. Try running your command * in the shell *
to test it first. You also get any error messages. So you should type:

env -i /usr/bin/mongrel_rails start -d -e development -p 3003 -a

127.0.0.1 -P /home/seb/railsproject/cpericard/log/mongrel.3003.pid -c /
home/seb/railsproject/cpericard

and see how it works.

Setting “env -i” in the shell reproduces the environment used in
monit, so it lets you test your command as if it was run by monit.

Gaspard

sorry ! and thanks for your help gaspard

i tried this command and mongrel is starting.

now it’s working !

i didn’t change anything.

my definitive conf file is :

set daemon 60

set httpd port 2812 and
use address 127.0.0.1
allow 127.0.0.1

check process mongrel-3003 with pidfile
/home/seb/railsproject/cpericard/log/mongrel.3003.pid
start program = “/usr/bin/mongrel_rails start -d -e development -p
3003 -a 127.0.0.1 -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railsproject/cpericard”
stop program = “/usr/bin/mongrel_rails stop -P
/home/seb/railsproject/cpericard/log/mongrel.3003.pid -c
/home/seb/railsproject/cpericard”
group mongrel

thanks for all your help !