#!/sbin/runscript # Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/www-servers/spawn-fcgi/files/spawn-fcgi.initd,v 1.1 2009/04/01 10:12:17 bangert Exp $ PROGNAME=${SVCNAME/spawn\-fcgi./} SPAWNFCGI=/usr/bin/spawn-fcgi PIDPATH=/var/run/spawn-fcgi PIDFILE=${PIDPATH}/${PROGNAME} depend() { need net } start() { if [[ "${SVCNAME}" == "spawn-fcgi" ]]; then eerror "You are not supposed to run this script directly. Create a symlink" eerror "for the FastCGI application you want to run as well as a copy of the" eerror "configuration file and modify it appropriately like so..." eerror eerror " ln -s spawn-fcgi /etc/init.d/spawn-fcgi.trac" eerror " cp /etc/conf.d/spawn-fcgi /etc/conf.d/spawn-fcgi.trac" eerror " `basename "${EDITOR}"` /etc/conf.d/spawn-fcgi.trac" eerror return 1 fi if [[ ! -z "${FCGI_SOCKET}" ]] && [[ ! -z "${FCGI_PORT}" ]]; then eerror "Only one of both must be defined:" eerror " FCGI_SOCKET=${FCGI_SOCKET}" eerror " FCGI_PORT=${FCGI_PORT}" return 1 fi local X E OPTIONS SOCKET_OPTION PORT_OPTION RETVAL if [[ -z "${FCGI_ADDRESS}" ]]; then FCGI_ADDRESS=127.0.0.1 fi if [[ -z "${FCGI_CHILDREN}" ]]; then FCGI_CHILDREN=1 fi if [[ -n "${PHP_FCGI_CHILDREN}" ]]; then OPTIONS="${OPTIONS} -C ${PHP_FCGI_CHILDREN}" fi if [[ -n "${FCGI_CHROOT}" ]]; then OPTIONS="${OPTIONS} -c ${FCGI_CHROOT}" fi if [[ -n "${FCGI_USER}" ]] && [[ "${FCGI_USER}" != "root" ]]; then OPTIONS="${OPTIONS} -u ${FCGI_USER}" fi if [[ -n "${FCGI_GROUP}" ]] && [[ "${FCGI_GROUP}" != "root" ]]; then OPTIONS="${OPTIONS} -g ${FCGI_GROUP}" fi ALLOWED_ENV="$ALLOWED_ENV USER GROUPS PHP_FCGI_MAX_REQUESTS RAILS_ENV TRAC_ENV_PARENT_DIR TRAC_ENV" unset E for i in ${ALLOWED_ENV}; do [[ -n "${!i}" ]] && E="${E} -e ${i}=${!i}" done ebegin "Starting FastCGI application ${PROGNAME}" for X in `seq 1 ${FCGI_CHILDREN}`; do local P P=${PIDFILE}-${X}.pid [[ -n "${FCGI_SOCKET}" ]] && SOCKET_OPTION="-s ${FCGI_SOCKET}-${X}" [[ -n "${FCGI_PORT}" ]] && PORT_OPTION="-a ${FCGI_ADDRESS} -p $((${FCGI_PORT} + ${X} - 1))" start-stop-daemon --start --pidfile ${P} ${E} --exec ${SPAWNFCGI} -- \ ${SOCKET_OPTION} ${PORT_OPTION} -f ${FCGI_PROGRAM} -P ${P} ${OPTIONS} RETVAL=$? # Stop on error. Don't want to spawn a mess! [[ "${RETVAL}" != "0" ]] && break done eend ${RETVAL} } stop() { local X RETVAL=0 ebegin "Stopping FastCGI application ${PROGNAME}" for X in ${PIDFILE}-[0-9]*.pid ; do start-stop-daemon --stop --pidfile ${X} || \ { RETVAL=$? && break ; } done eend ${RETVAL} }