[Catalyst] App Deployment - Apache, FastCGI, init.d

Mitchell Jackson mitch.lists at onsitesquad.com
Thu Sep 20 02:57:10 GMT 2007


Friends,

I've got an interesting issue with a few catalyst apps.  I have a server 
running two apps under apache with FastCGI.  I wrote an init script to 
start and stop the app server, it's attached below.  I started having 
issues with the init script once I began running multiple apps.  The 
init scripts ( using the standard rc.d/functions library ) identify the 
PID of the FastCGI process via it's process name, which is 
"perl-fcgi-pm". Because of this, when I issue a stop or restart command 
to the catalyst server via the init script, it may operate on the wrong 
process.

I dug into trying to change the running process name as seen by ps, but 
this seems to be a fully static value defined by FCGI::ProcManager with 
no option to override it (?).

I tried to get the init script able to properly identify the processes ( 
it seems to use the PID files which contain the correct PID for each 
process ) but it still might operate on the incorrect PID.

I've seen it mentioned on the list to use daemon tools with PAR ( 
http://www.catalystframework.org/calendar/2006/4 ) but that uses the 
built-in myapp_server.pl, running it's own web server, and I much prefer 
the apache/fastcgi approach, most especially because it leaves the work 
of serving static content to apache instead of the heavier application 
process.

Does anybody have a better init script than the one below for handling 
the fastcgi processes?  I'm probably missing something obvious X.X

Kind Regards,

/Mitchell Jackson
OnSite Mobile

___________________________
#!/bin/bash
#
# qualify        manage qualify fastcgi server
#
# chkconfig: - 89 16
# description: Manage starting, stopping and restarting the \
#              catalyst fastcgi application
# processname: qualify
# pidfile: /var/run/qualify_fastcgi.pid

# Source function library
. /etc/rc.d/init.d/functions

# Paths
fastcgi=/var/www/qualify.x.com/qualify/script/qualify_fastcgi.pl
socket=/tmp/qualify.socket
prog=perl-fcgi-pm
pidfile=${PIDFILE-/tmp/qualify_fastcgi.pid}
lockfile=${LOCKFILE-/var/lock/qualify_fastcgi}
RETVAL=0
userid=qualify.x.com
parms=$"-l $socket -n 5 -p $pidfile -d"

start() {
        echo -n $"Starting $prog: "
        daemon --user $userid --pidfile $pidfile $fastcgi $parms
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        killproc -p $pidfile -d 10 $prog
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p $pidfile $prog
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if [ -f ${pidfile} ] ; then
                stop
                start
        fi
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
        exit 1
esac

exit $RETVAL




More information about the Catalyst mailing list