[Seaside] Monit on Ubuntu / Debian to monitor Seaside images

Rajeev Lochan lochan94 at gmail.com
Fri Feb 8 19:00:05 UTC 2008


Thanks for your kind help Sebastian.
Following your instructions, I have managed to write init script for start
and stop. I was lucky to get code from
http://www.nabble.com/attachment/8445249/1/squeak_http_service

and after some tweaking, I have the following code for /etc/init.d/seaside

#########################################################################
#!/bin/sh

# Script to start a Squeak(Seaside) Image which runs Kom HTTP Server in
-nodisplay mode.
# Because main purpose is to run as service from /etc/init.d/seaside,
# this can be started by root, but runs under regular user

# Check and run what user asked for.

case "$1" in
    start)
         echo -n "Starting Seaside "
    if [ "$SQUEAK_HTTP_PID" != "" ]; then
       echo "SQUEAK_HTTP Already running, exiting"
       # exit 1
    else

       # Change directory and run Squeak headless
       cd /home/rajeev/caartz
        /usr/bin/squeakvm -nodisplay caartz01 "" port 9091 &
           SQUEAK_HTTP_PID=`ps -eo pid,command | grep "squeak" | grep -v
grep | awk '{ print $1 }'`
           cd /var/run
           echo "Seaside is Started and is running with PID"
           echo $SQUEAK_HTTP_PID

           echo $SQUEAK_HTTP_PID > squeak.pid
         fi
        ;;
    stop)
         echo -n "Shutting down Seaside "
           cd /var/run
        SQUEAK_HTTP_PID=`head squeak.pid`
    if [ "$SQUEAK_HTTP_PID" = "" ]; then
       echo "Seaside Not running!"
    else
       #kill -SIGINT $SQUEAK_HTTP_PID
       kill -HUP $SQUEAK_HTTP_PID
           rm -rf squeak.pid
    fi
        ;;
    pid)
        cd /var/run
        SQUEAK_HTTP_PID=`head squeak.pid`

    echo "You asked for PID: here:"
    echo $SQUEAK_HTTP_PID
    ;;
    *)
        echo "Usage: $0 {start|stop|pid}"
        exit 1
        ;;
esac


##########################################################################

I then add the following code in monitrc

check process squeakvm with pidfile /var/run/squeak.pid
 group server
 start program = "/etc/init.d/seaside start"
 stop program = "/etc/init.d/seaside stop"
 if cpu > 60% for 2 cycles then alert
 if cpu > 80% for 5 cycles then restart
 if totalmem > 200.0 MB for 2 cycles then restart

 if loadavg(5min) greater than 10 for 8 cycles then restart
 if 5 restarts within 5 cycles then timeout
#####################################################################

And to my excitement, Monit works for the above set of code.
1) I am able to start a seaside image, grep for 'squeak' in the ps and
assign its PID to a variable and then echo that into /var/run/squeak.pid
(here squeak.pid is created or overwritten)

2) When I stop the image, the PID is read from /var/run/squeak.pid and the
process is killed, then the file squeak.pid is deleted

The setup works well. I did the following to test

$ pkill squeakvm
or
$ sudo /etc/init.d/seaside stop

In both cases, after daemon checking time of 60 seconds, Seaside image was
started automatically.

So far so good, now my only concern in this regard is how to run Multiple
seaside/squeak images ?

AFAIK, the default process name for all the squeak instances running are
'squeakvm' , how to change this to suit image name or the best thing would
be to have seaside_9091  (port number.. the way mongrel_8010 is named)

If we get unique process name, then using Monit would become easier.

Thanks & Regards,
Rajeev

On Feb 7, 2008 6:46 PM, Sebastian Sastre <ssastre at seaswork.com> wrote:

>  Well done,
>
>     if you read the monit documentation you will figure out quickly how to
> use it. And yes you have to set a name for each process/image which monit
> only can discern by looking its pid file. That's why I've made those squeak
> production images to make a pid file with the name of the service (only if
> in unix like OS) and delete it when shutdown. And the script that is named
> with the name of the service.
>
>     I'm also using two scripts one is SERVICENAME and the other is
> SERVICENAMEg. The second is to open the image with full display. This can be
> done in the same script by a different command like startHeadfull instead of
> start and that comand uses the headfull invocation of squeak.
>
>     So the scripts to start and stop looks pretty much as those but I
> modify them to allow me to pass as argument a configuration file (just a .st
> file defining a dictionary of options). I think they will work for any
> linux. I needed to make a directory under /var/run to store only pids of
> seaside images to make things more simple.
>
>     cheers,
>
>
> Sebastian Sastre
>
>
>  ------------------------------
> *De:* seaside-bounces at lists.squeakfoundation.org [mailto:
> seaside-bounces at lists.squeakfoundation.org] *En nombre de *Rajeev Lochan
> *Enviado el:* Jueves, 07 de Febrero de 2008 10:34
> *Para:* Seaside - general discussion
> *Asunto:* Re: [Seaside] Monit on Ubuntu / Debian to monitor Seaside images
>
> Hi Sebastian,
> I am figuring out a bit of what you sent me in your reply. OJ7WRE is the
> name of your Seaside service. I am now searching for init script for Squeak
> image. Till now, this is the nearest things I have got
>
> http://wiki.squeak.org/swiki/124     for RedHat Distro
> http://wiki.squeak.org/swiki/123     for Solaris
>
> Which one to go for ?, Is there any other thing much more specific to
> Debian / Ubuntu .
>
> Thanks for your help,
> Rajeev
>
> On Feb 7, 2008 2:28 AM, Sebastian Sastre <ssastre at seaswork.com> wrote:
>
> >  Hi Rajeev,
> >
> >     Monit its simple and yet powerful.
> >
> >     This is how the monitrc file looks like to monitor a squeak image:
> >
> >
> > ###############################################################################
> > ## Monitoring DEVELOPMENT Service OJ7WRE
> >
> > ###############################################################################
> >
> >  check process OJ7WRE with pidfile /var/run/services/OJ7WRE.pid
> >  group server
> >  start program = "/etc/init.d/OJ7WRE start"
> >  stop program = "/etc/init.d/OJ7WRE stop"
> >
> >  if cpu > 60% for 2 cycles then alert
> >  if cpu > 80% for 5 cycles then restart
> >  if totalmem > 200.0 MB for 2 cycles then restart
> >
> >  if loadavg(5min) greater than 10 for 8 cycles then restart
> >  if 5 restarts within 5 cycles then timeout
> >
> > ###############################################################################
> >
> >     the start and stop script is doing more or less what you are doing
> > manually. I send a kill -15 to close image gently. Also I needed to make the
> > pid file when the image starts and remove before image quits. I have an
> > object in the image dedicated to startup and shutdown production stuff
> > inside the image.
> >
> >     For a "more monitored" services you can make monit to send you an
> > email to your cell phone if it reach some point (like a service restart or
> > fail to start or CPU 100% for more than 5 min or apache is down or
> > whatever).
> >
> >     cheers,
> >
> >
> > Sebastian Sastre
> >
> >
> >  ------------------------------
> > *De:* seaside-bounces at lists.squeakfoundation.org [mailto:
> > seaside-bounces at lists.squeakfoundation.org] *En nombre de *Rajeev Lochan
> > *Enviado el:* Miércoles, 06 de Febrero de 2008 17:36
> > *Para:* Seaside - general discussion
> > *Asunto:* [Seaside] Monit on Ubuntu / Debian to monitor Seaside images
> >
> >   Hi,
> > I have been working towards setting up a dedicated server (Ubuntu) to
> > host my Seaside app as per Ramon's Blog
> > http://onsmalltalk.com/programming/smalltalk/scaling-seaside-redux-enter-the-penguin/
> >
> > Till now, I have been successful in having Apache serve static content
> > and Load balance between 3 images of my Seaside App. Sticky sessions are
> > working and everything is going well so far. But I had a problem when
> > installing Daemontools (which Ramon has written in his blog and also Lukas
> > has written in Mailing lists), the recent versions of Ubuntu, dont support
> > Daemontools out of the box.
> >
> > In one of the comments to Ramon's post, I could learn that some of the
> > seasiders have used Monit to do much more than want Daemontools does. Could
> > you please guide me how to go about.
> >
> > I came across a blog on Rails using Monit
> > http://www.igvita.com/2006/11/07/monit-makes-mongrel-play-nice/
> > In that, what is the equivalent code to Seaside of the following code ?
> >
> > start program = "/usr/local/bin/ruby /usr/local/bin/mongrel_rails start -d -e production -p 8010 -a 127.0.0.1 -P /home/user/current/log/mongrel.8010.pid -c /home/user/rails/current"
> >
> >
> >     stop program  = "/usr/local/bin/ruby /usr/local/bin/mongrel_rails stop -P /home/user/current/log/mongrel.8010.pid"
> >
> > Till now, I have been starting the images manually by
> > /seaside$ squeakvm  -nodisplay seasidedemo "" port 9090 &
> >
> > and to kill it, i use $ pkill squeakvm    or $ kill [PID of SqueakVM]
> >
> > I suppose, we will also have to change the following code
> >
> > if totalmem is greater than 60.0 MB for 5 cycles then restart
> >
> >
> > When an image is running on my server (Pentium Dual Core 2.8 GHz with 1
> > GB RAM), it shows almost 3-4% CPU and 3-4% RAM , should we shift the memory
> > cap from 60 MB to 100 MB / image ?
> >
> >
> > Is there any other options we have ?
> >
> > Thanks for the help,
> >
> > Rajeev
> >
> > Co-founder, AR-CAD.com
> >
> > http://www.ar-cad.com
> > +91 9243468076 (Bangalore)
> > 080 65355873
> >
> >
> > _______________________________________________
> > seaside mailing list
> > seaside at lists.squeakfoundation.org
> > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >
> >
>
>
> --
> Rajeev Lochan
>
> Co-founder, AR-CAD.com
>
> http://www.ar-cad.com
> +91 9243468076 (Bangalore)
> 080 65355873
>
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>


-- 
Rajeev Lochan

Co-founder, AR-CAD.com

http://www.ar-cad.com
+91 9243468076 (Bangalore)
080 65355873
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20080209/f1d7216f/attachment-0001.htm


More information about the seaside mailing list