Revision 6 - 2009-04-14 at 10:50:21

see fcgi-init for configuration.

If you want to set the catalyst engine do one of the following:

  • export MYAPP_ENGINE before the init script is run

  • add it to /etc/default/myapp

### /etc/default/myapp
export MYAPP_ENGINE=HTTP::Prefork

#!/bin/sh
# Start a Catalyst app under Engine::HTTP(::Prefork)

### BEGIN INIT INFO
# Provides: myapp
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $network $named
# Should-Start: apache2
# Should-Stop: apache2
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MyApp
### END INIT INFO

. /lib/lsb/init-functions

APPNAME=MyApp
APPDIR=/home/user/MyApp
UNIXNAME=$(echo $APPNAME | perl -pe 's/::/_/;$_=lc')
# Leave these unset and we won't try to setuid/setgid.
USER=user
GROUP=user
# Set this if you have more than one instance of the app and you don't want
# them to step on each other's pidfile.
PIDSUFFIX=

if [ -f "/etc/default/"$UNIXNAME ]; then
. "/etc/default/"$UNIXNAME
fi

if [ $(id -u) -eq 0 ] ; then
  PIDDIR=/var/run/$UNIXNAME
  mkdir $PIDDIR >/dev/null 2>&1
  chown $USER:$GROUP $PIDDIR
  chmod 775 $PIDDIR
else
  PIDDIR=/tmp
fi

PIDFILE=$PIDDIR/$UNIXNAME${PIDSUFFIX:+"-$PIDSUFFIX"}.pid

check_running() {
    [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) 2> /dev/null
}

check_compile() {
  if [ -n "$USER" ] ; then
    if su $USER -c "cd $APPDIR ; perl -Ilib -M$APPNAME -ce1 2> /dev/null" ; then
        return 1
    fi
    return 0
  else
    if ( cd $APPDIR ; perl -Ilib -M$APPNAME -ce1 2> /dev/null ) ; then
      return 1
    fi
    return 0
  fi
}

_start() {
  start-stop-daemon --start --quiet --pidfile $PIDFILE -m --chdir $APPDIR \
    ${USER:+"--chuid"} $USER ${GROUP:+"--group"} $GROUP --background \
    --startas $APPDIR/script/${UNIXNAME}_server.pl


  for i in 1 2 3 4 5 ; do
    sleep 1
    if check_running ; then
      return 0
    fi
  done
  return 1
}

start() {
    log_daemon_msg "Starting $APPNAME" $UNIXNAME
    if check_running; then
        log_failure_msg "already running"
        log_end_msg 1
        exit 1
    fi

    if check_compile ; then
        log_failure_msg "Error detected; not restarting."
        log_end_msg 1
        exit 1
    fi

    rm -f $PIDFILE 2>/dev/null

    _start
    log_end_msg $?
    return $?
}

stop() {
    log_daemon_msg "Stopping $APPNAME" $UNIXNAME

    start-stop-daemon --stop --retry 1 --user $USER --quiet --pidfile $PIDFILE
    log_end_msg $?
    return $?
}

restart() {
    stop
    start
    return $?
}

# See how we were called.
case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart|force-reload)
        restart
    ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
exit $?

My tags:
 
Popular tags:
 
Powered by Catalyst
Powered by MojoMojo Hosted by Shadowcat - Managed by Nordaaker