Author: glen                         Date: Thu Dec 14 18:42:22 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- almost zero (perhaps true?) downtime in case restart and using local sockets
- you must upgrade you config to use new vars for this to take effect (old 
config is fine too just no new features)

---- Files affected:
SOURCES:
   php-fcgi.sysconfig (1.7 -> 1.8) , php-fcgi.init (1.10 -> 1.11) 

---- Diffs:

================================================================
Index: SOURCES/php-fcgi.sysconfig
diff -u SOURCES/php-fcgi.sysconfig:1.7 SOURCES/php-fcgi.sysconfig:1.8
--- SOURCES/php-fcgi.sysconfig:1.7      Thu Dec 14 14:21:12 2006
+++ SOURCES/php-fcgi.sysconfig  Thu Dec 14 19:42:16 2006
@@ -1,10 +1,19 @@
 # $Id$
-
-# Bind to tcp port 1026 on localhost, running as http:http
-#SPAWNARGS="-p 1026 -u http -g http"
+#
+# User and Group to use for spawned FCGI app.
+SPAWN_UID=http
+SPAWN_GID=http
 
 # Bind to unix-domain socket, running as http:http
-SPAWNARGS="-s /var/run/php/fcgi.sock -u http -g http"
+SPAWN_SOCKET="/var/run/php/fcgi.sock"
+
+# Bind to tcp port 1026 on localhost.
+# Address myst be IPv4 not name.
+#SPAWN_PORT="1026"
+#SPAWN_ADDR="127.0.0.1"
+
+# Additional args not covered here.
+#SPAWNARGS=""
 
 # for PHP 5.x
 PHP_FCGI_BINARY=/usr/bin/php.fcgi

================================================================
Index: SOURCES/php-fcgi.init
diff -u SOURCES/php-fcgi.init:1.10 SOURCES/php-fcgi.init:1.11
--- SOURCES/php-fcgi.init:1.10  Thu Dec 14 09:12:08 2006
+++ SOURCES/php-fcgi.init       Thu Dec 14 19:42:16 2006
@@ -33,17 +33,68 @@
        PHP_FCGI_BINARY=/usr/bin/php.fcgi
 fi
 
+checkconfig() {
+       if [ -n "$SPAWN_PORT" -a -n "$SPAWN_SOCKET" ]; then
+               echo >&2 "$0: port and socket can not be used simulatenously"
+               exit 1
+       fi
+
+       if [ -n "$SPAWN_ADDR" -a -z "$SPAWN_PORT" ]; then
+               echo >&2 "$0: bind address specified but no port"
+               exit 1
+       fi
+
+       if [ -n "$SPAWN_ADDR" ] && [[ $SPAWN_ADDR != [0-9]*.[0-9]*.[0-9]*.[0-9] 
]]; then
+               echo >&2 "$0: bind address not valid ipv6 address: $SPAWN_ADDR"
+               exit 1
+       fi
+
+       if [ -n "$SPAWN_PORT" ] && [[ $SPAWN_PORT != [0-9]* ]]; then
+               echo >&2 "$0: spawn port not numeric: $SPAWN_PORT"
+               exit 1
+       fi
+}
+
+# Spawns FCGI process.
+
+# Sets $RETVAL
+# Creates subsys lock.
+fcgi_spawn() {
+       export PHP_FCGI_MAX_REQUESTS
+       export FCGI_WEB_SERVER_ADDRS
+       local args
+
+       # user/group
+       args="$args ${SPAWN_UID:+-u $SPAWN_UID}"
+       args="$args ${SPAWN_GID:+-g $SPAWN_GID}"
+
+       # bind address
+       args="$args ${SPAWN_ADDR:+-a $SPAWN_ADDR}"
+       args="$args ${SPAWN_PORT:+-p $SPAWN_PORT}"
+       args="$args ${SPAWN_SOCKET:+-s $SPAWN_SOCKET}"
+       args="$args $SPAWNARGS"
+
+       msg_starting "PHP FastCGI"
+       checkconfig
+       daemon /usr/sbin/spawn-fcgi -P /var/run/php-fcgi.pid $args -f 
$PHP_FCGI_BINARY -C $PHP_FCGI_CHILDREN
+       RETVAL=$?
+       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/php-fcgi
+}
+
+# Stops FCGI.
+#
+# Removes lockfile.
+# RETVAL is not set
+fcgi_stop() {
+       msg_stopping "PHP FastCGI"
+       killproc --pidfile php-fcgi.pid ${PHP_FCGI_BINARY##*/}
+       rm -f /var/lock/subsys/php-fcgi >/dev/null 2>&1
+}
+
 start() {
        # Start daemons.
        if [ ! -f /var/lock/subsys/php-fcgi ]; then
-               export PHP_FCGI_MAX_REQUESTS
-               export FCGI_WEB_SERVER_ADDRS
-
-               msg_starting "PHP FastCGI"
-               daemon /usr/sbin/spawn-fcgi -P /var/run/php-fcgi.pid $SPAWNARGS 
-f $PHP_FCGI_BINARY -C $PHP_FCGI_CHILDREN
-
-               RETVAL=$?
-               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/php-fcgi
+               fcgi_spawn
        else
                msg_already_running "PHP FastCGI"
        fi
@@ -52,27 +103,69 @@
 stop() {
        # Stop daemons.
        if [ -f /var/lock/subsys/php-fcgi ]; then
-               msg_stopping "PHP FastCGI"
-               killproc --pidfile php-fcgi.pid ${PHP_FCGI_BINARY##*/}
-               rm -f /var/lock/subsys/php-fcgi >/dev/null 2>&1
+               fcgi_stop
        else
                msg_not_running "PHP FastCGI"
        fi
 }
 
+restart() {
+
+       local stop socket oldpid newpid
+
+       # we need to know about stopping before we start
+       if [ -f /var/lock/subsys/php-fcgi ]; then
+               stop=1
+               oldpid=$(cat /var/run/php-fcgi.pid)
+       fi
+
+       # so if we're using local sockets, we can create the new processes 
before
+       # stopping old ones, thus causing almost no downtime during restart
+       if [ "$SPAWN_SOCKET" ]; then
+               socket="$SPAWN_SOCKET"
+               SPAWN_SOCKET=$(mktemp -p ${SPAWN_SOCKET%/*} 
${SPAWN_SOCKET##*/}.XXXXXX) || exit 1
+               [ "$SPAWN_UID" ] && chown $SPAWN_UID $SPAWN_SOCKET
+               [ "$SPAWN_GID" ] && chgrp $SPAWN_GID $SPAWN_SOCKET
+
+               fcgi_spawn
+               if [ $RETVAL = 0 ]; then
+                       # on success switch the socket and we can kill the old 
processes
+                       mv -f "$SPAWN_SOCKET" "$socket"
+
+                       # to prevent killing the newly spawned process we 
restore pid of old fcgi
+                       newpid=$(cat /var/run/php-fcgi.pid)
+                       echo "$oldpid" > /var/run/php-fcgi.pid
+               fi
+       fi
+
+       # Stop daemons.
+       if [ "$stop" = 1 ]; then
+               fcgi_stop
+               if [ -n "$newpid" ]; then
+                       echo "$newpid" > /var/run/php-fcgi.pid
+                       touch /var/lock/subsys/php-fcgi
+               fi
+       fi
+
+       # if we used socket, the new process was started before killing old one
+       if [ -z "$SPAWN_SOCKET" ]; then
+               fcgi_spawn
+       fi
+}
+
 RETVAL=0
 # See how we were called.
 case "$1" in
 start)
+       checkconfig
        start
        ;;
 stop)
        stop
        ;;
 restart)
-       stop
-       start
-       exit $?
+       checkconfig
+       restart
        ;;
 status)
        status php-fcgi $PHP_FCGI_BINARY
@@ -81,7 +174,7 @@
 reload|force-reload)
        if [ -f /var/lock/subsys/php-fcgi ]; then
                msg_reloading "PHP FastCGI"
-               killproc php.fcgi -HUP
+               killproc --pidfile php-fcgi.pid ${PHP_FCGI_BINARY##*/}
                RETVAL=$?
        else
                msg_not_running "PHP FastCGI"
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/php-fcgi.sysconfig?r1=1.7&r2=1.8&f=u
    http://cvs.pld-linux.org/SOURCES/php-fcgi.init?r1=1.10&r2=1.11&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to