Getting monit to restart mongrel after a crash

1 minute read

An annoying aspect of the Mongrel webserver is
that it refuses to start if it detects a stale pidfile. This causes real
problems when you’re trying to use something like
Monit to automatically restart mongrel
after a crash.

Most daemons check whether the process_id in the pidfile is running. Ezra has
indicated that a future release of mongrel will do this but in the meantime, we
can use mongrel_cluster
with the –clean option to remove stale pidfiles before starting mongrel.

Update /etc/init.d/mongrel_cluster to include the –clean option in the start and restart commands.

Update your monit config to use mongrel_cluster. Note that monit sets a
restricted path (PATH=/bin:/usr/bin:/sbin:/usr/sbin) and the internals of the
mongrel_cluster gem call mongrel_rails without specifying the path. mongrel
maintainers [http://mongrel.rubyforge.org/ticket/31#comment:1 suggest] using
env in the monit command and said this is already fixed in a svn. I’ve found
creating a symlink from /usr/local/bin/mongrel_rails to /usr/bin/mongrel_rails
does the trick. Then update your monit config to look something like this:

The nice part here is the –only option which allows you to restrict the command to a single mongrel process (as defined in the config file).

I’ve deprec-1.99.16 has been updated to use mongrel_cluster as described above
to clean up stale pidfiles before starting mongrel. As a side note, I was glad
to see mongrel has a new website and is being
fed and cared for by it’s new owners.