#!/bin/sh
#
# Spawn a fcgi processes
#
# chkconfig: - 48 52
# description: Spawn a fcgi processes
# processname: /usr/bin/spawn-fcgi
# config: /etc/sysconfig/spawn-fcgi
# pidfile: /run/spawn-fcgi/spw-cgi.pid
### BEGIN INIT INFO
# Provides: spawn-fcgi
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Spawn a fcgi processes
# Short-Description: start and stop spawn-fcgi
### END INIT INFO

WITHOUT_RC_COMPAT=1

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

PIDFILE=/run/spawn-fcgi/spw-cgi.pid
SOCKET=/run/spawn-fcgi/spw-cgi.sock

LOCKFILE=/var/lock/subsys/spawn-fcgi

# Source config
SourceIfNotEmpty /etc/sysconfig/spawn-fcgi

################## no config below this line

RETVAL=0
PROG=`basename $FCGIPROGRAM`

start ()
{
		if test x$PHP_FCGI_CHILDREN = x; then
				PHP_FCGI_CHILDREN=5
		fi

		export PHP_FCGI_MAX_REQUESTS
		export FCGI_WEB_SERVER_ADDRS

		ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

		EX="$SPAWNFCGI  -P $PIDFILE -C $PHP_FCGI_CHILDREN"

		if [ -n "$FCGILISTEN" -a -n "$FCGIPORT" ]; then
			EX="$EX -a $FCGILISTEN -p $FCGIPORT"
			DMODE=1770
		else
			EX="$EX -s $SOCKET ${SOCKETMODE:+-M $SOCKETMODE}"
			DMODE=1771
		fi

		if test x$UID = x0; then
			EX="$EX -u $USERID -g $GROUPID"
			if [ -z "$FCGILISTEN" -a -z "$FCGIPORT" ]; then
				EX="$EX ${SOCKETUSER:+-U $SOCKETUSER} ${SOCKETGROUP:+-G $SOCKETGROUP}"
			fi
		fi

		chown root:$GROUPID /run/spawn-fcgi
		chmod $DMODE /run/spawn-fcgi
		# copy the allowed environment variables
		E=
		
		for i in $ALLOWED_ENV; do
				E="$E $i=${!i}"
		done

		# clean environment and set up a new one

		start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user $USERID --name $PROG -- env - $E $EX -- $FCGIPROGRAM $FCGIOPTIONS
		RETVAL=$?
		return $RETVAL
}

stop ()
{
		stop_daemon --lockfile "$LOCKFILE" --expect-user $USERID -- $PROG
		RETVAL=$?
		return $RETVAL
		# for sanity.- FIXME
		sleep 30
}
			
case "$1" in
		start)
			start
			;;
		stop)
			stop
			;;
		restart)
			stop
			start
			;;
		condstop)
			if [ -e "$LOCKFILE" ]; then
				stop
			fi
			;;
		condrestart)
			if [ -e "$LOCKFILE" ]; then
				stop
				start
			fi
			;;
		condreload)
			if [ -e "$LOCKFILE" ]; then
				stop
				start
			fi
			;;
		status)
			status --pidfile "$PIDFILE" --expect-user $USERID -- $PROG
			RETVAL=$?
			;;
		*)
		msg_usage "${0##*/} {start|stop|restart|condrestart|status}"
		RETVAL=1
esac

exit $RETVAL
