Django's FastCGI init.d script for Linux

2007-01-12 Thread Guillermo Fernandez Castellanos

Hi,

For my convenience I've written an init.d script that automatizes the
startup of my FastCGI django servers. As it might interest other
people, I share it here. Feedback  is welcomed.

I can put as many sites as I want, and it will automatically assign
different port numbers to different servers in an increasing order
starting from $PORT_START. It follows the start stop restart
force-reload syntax of the startup scripts and integrates with the
startup process in Ubuntu and Debian systems. Should work in RedHat as
well, not in Gentoo though.

http://www.guindilla.eu/blog/2007/01/12/djangos-fastcgi-initd-script-linux/

The wrapper (/www/run/django_fcgi in my system) is here:
*
 #! /bin/sh

[ $# = 4 ] || echo -n "Usage: $0 django_site ip port pid_file"

DJANGO_SITE=$1
IP=$2
PORT=$3
PID_FILE=$4

/usr/bin/env python $DJANGO_SITE/manage.py runfcgi \
host=$HOST port=$PORT pidfile=$PID_FILE
*

The init script is here:
*
#! /bin/sh
### BEGIN INIT INFO
# Provides:  FastCGI servers for Django
# Required-Start:networking
# Required-Stop: networking
# Default-Start: 2 3 4 5
# Default-Stop:  S 0 1 6
# Short-Description: Start FastCGI servers with Django.
# Description:   Django, in order to operate with FastCGI, must be started
#in a very specific way with manage.py. This must be done
#for each DJango web server that has to run.
### END INIT INFO
#
# Author:  Guillermo Fernandez Castellanos
#  <[EMAIL PROTECTED]>.
#
# Version: @(#)fastcgi 0.1 11-Jan-2007 [EMAIL PROTECTED]
#

 SERVER SPECIFIC CONFIGURATION
#HOST=`/sbin/ifconfig | /bin/sed -n -e 's/\(.*\)inet addr:\(.*\)B.*$/\2/p'`
DJANGO_SITES="complu_haruki_eu www_haruki_eu www_guindilla_eu"
SITES_PATH=/www
DAEMON=/www/run/django_fcgi
RUNFILES_PATH=$SITES_PATH/run
HOST=127.0.0.1
PORT_START=3000
 DO NOT CHANGE ANYTHING AFTER THIS LINE!

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="FastCGI servers"
NAME=$0
SCRIPTNAME=/etc/init.d/$NAME


# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0


#
#   Function that starts the daemon/service.
#
d_start()
{
# Starting all Django FastCGI processes
PORT=$PORT_START
for SITE in $DJANGO_SITES
do
echo -n ", $SITE"
# As $DAEMON is a shell script, the process runs with the name "bash",
# not "$DAEMON".
# Thus I can not use the start-stop-daemon method here.
# start-stop-daemon --start --quiet --pidfile $RUNFILES_PATH/$SITE.pid \
# --exec $DAEMON -- $SITES_PATH/$SITE $HOST $PORT
$RUNFILES_PATH/$SITE.pid \
if [ -f $RUNFILES_PATH/$SITE.pid ]; then
echo -n " already running"
else
$DAEMON $SITES_PATH/$SITE $HOST $PORT $RUNFILES_PATH/$SITE.pid
fi
let "PORT = $PORT + 1"
done
}


#
#   Function that stops the daemon/service.
#
d_stop() {
# Killing all Django FastCGI processes running
for SITE in $DJANGO_SITES
do
echo -n ", $SITE"
start-stop-daemon --stop --quiet --pidfile $RUNFILES_PATH/$SITE.pid \
  || echo -n " not running"
if [ -f $RUNFILES_PATH/$SITE.pid ]; then
   rm $RUNFILES_PATH/$SITE.pid
fi
done
}


ACTION="$1"
case "$ACTION" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;

stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;

restart|force-reload)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;

*)
echo "Usage: $NAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac


exit 0
*

Hope it helps,

G

--~--~-~--~~~---~--~~
 You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Django's FastCGI init.d script for Linux

2007-01-12 Thread Michael Radziej

Hi,

could you put this into the wiki? This type of stuff is a lot of
help to new users, but in the mailing list it gets lost. Please note
for which type of linux your script is intended, since init scripts
for, e.g. debian or SUSE, look quite different.

Michael



-- 
noris network AG - Deutschherrnstraße 15-19 - D-90429 Nürnberg -
Tel +49-911-9352-0 - Fax +49-911-9352-100

http://www.noris.de - The IT-Outsourcing Company

--~--~-~--~~~---~--~~
 You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Django's FastCGI init.d script for Linux

2007-01-14 Thread Guillermo Fernandez Castellanos


Hi,

I added it to the wiki, in a page linked to:
http://code.djangoproject.com/wiki/ServerArrangements
in a new index called "FastCGI init scripts" as you proposed.

Thanks,

G

On 1/12/07, Michael Radziej <[EMAIL PROTECTED]> wrote:


Hi,

could you put this into the wiki? This type of stuff is a lot of
help to new users, but in the mailing list it gets lost. Please note
for which type of linux your script is intended, since init scripts
for, e.g. debian or SUSE, look quite different.

Michael



--
noris network AG - Deutschherrnstraße 15-19 - D-90429 Nürnberg -
Tel +49-911-9352-0 - Fax +49-911-9352-100

http://www.noris.de - The IT-Outsourcing Company

>



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---