#$Id: fcgi_funcs 38 2008-10-27 16:25:47Z valera $ # functions for parsing configuration file get_hosts() { result="" y=$(awk -F = '/^host_[0-9][0-9]?=/ {print $2}' ${CONFIG}) for x in ${y}; do result=${result}" "$x done echo $result } get_identifier() { host=$1 cmd="awk -F = '/^host_[0-9][0-9]?=$host[ ]?\$/ {print \$1}' ${CONFIG}" x=$(eval $cmd) if [ "X"${x} = "X" ]; then echo "Error: cant find specifier" exit 1 fi echo $x } get_dir() { host=$1 x=$(get_identifier $host) cmd="echo \$${x}_path" dir=$(eval $cmd) if [ "X"${dir} = "X" ]; then echo "Error: cant find dir for host $host" exit 1 fi echo $dir } get_proto() { host=$1 x=$(get_identifier $host) cmd="echo \$${x}_proto" dir=$(eval $cmd) if [ "X"${dir} = "X" ]; then echo "Error: cant find proto for host $host" exit 1 fi echo $dir } get_user() { host=$1 x=$(get_identifier $host) cmd="echo \$${x}_user" user=$(eval $cmd) if [ "X"${user} = "X" ]; then echo "Error: for host $host chroot user not specified" exit 1 fi echo $user } get_port() { host=$1 x=$(get_identifier $host) cmd="echo \$${x}_port" user=$(eval $cmd) if [ "X"${user} = "X" ]; then echo "Error: for host $host cant find bind port" exit 1 fi echo $user } get_load() { host=$1 x=$(get_identifier $host) cmd="echo \$${x}_load" load=$(eval $cmd) if [ "X"${load} = "X" ]; then echo "Error: for host $host cant find load" exit 1 fi echo $load } get_method() { host=$1 x=$(get_load $host) if [ "X"${x} = "X" ]; then echo "Error: for host $host cant find method (thread or fork)" exit 1 elif [ ${x} = "L" ]; then echo "threaded" elif [ ${x} = "M" ]; then echo "threaded" elif [ ${x} = "H" ]; then echo "prefork" fi } get_min() { host=$1 x=$(get_load $host) if [ "X"${x} = "X" ]; then echo "Error: for host $host cant find load" exit 1 elif [ ${x} = "L" ]; then echo "20" elif [ ${x} = "M" ]; then echo "40" elif [ ${x} = "H" ]; then echo "20" fi } get_max() { host=$1 x=$(get_load $host) if [ "X"${x} = "X" ]; then echo "Error: for host $host cant find load" exit 1; elif [ ${x} = "L" ]; then echo "20" elif [ ${x} = "M" ]; then echo "40" elif [ ${x} = "H" ]; then echo "20" fi } # functions for various operations host_status() { host=$1 dir=$(get_dir $host) 2>&- pid=$(cd $dir && cat ${host}.pid 2>&-) if [ "X"${pid} = "X" ]; then echo "Status: $host is down" exit 0; fi check=$(ps aux|awk '{print $2}'| grep $pid) if [ "X"${check} = "X" ]; then echo "Status: $host is down" else echo "Status: $host is up and running pid $pid" fi } host_start() { host=$1 dir=$(get_dir $host) user=$(get_user $host) port=$(get_port $host) method=$(get_method $host) min=$(get_min $host) max=$(get_max $host) proto=$(get_proto $host) # check to prevent double starts pid=$(cd $dir && cat ${host}.pid 2>&-) 2>&- # we are running of freebsd too SU=$(which su) if [ "X""$pid" != "X" ] ; then check=$(ps ax | grep python |grep $pid) if [ "X""$check" != "X" ]; then echo "Error: $host is already running pid - $pid" exit 1; fi fi # check that such directory exists if [ ! -d ${dir} ]; then echo "Error: cant start $host, $dir is not accessible" exit 1; fi if [ ${AS_ADMIN} = "Yes" ]; then cmd="$SU $user -c \"cd ${dir} ; ./manage.py runfcgi daemonize=true protocol=$proto maxspare=$max minspare=$min method=$method host=$BIND_TO port=$port outlog=${dir}/$OUTLOG errlog=${dir}/$OUTLOG pidfile=${dir}/${host}.pid \"" else cmd="cd ${dir} ; ./manage.py runfcgi daemonize=true protocol=$proto maxspare=$max minspare=$min method=$method host=$BIND_TO port=$port outlog=${dir}/$OUTLOG errlog=${dir}/$OUTLOG pidfile=${dir}/${host}.pid" fi eval $cmd result=$? if [ $result = 0 ] ; then echo "Site $host started" else echo "Error: cant start $host" exit 1; fi } host_stop() { host=$1 dir=$(get_dir $host) user=$(get_user $host) port=$(get_port $host) pid=$(cd $dir && cat ${host}.pid 2>&-) # we are running of freebsd too SU=$(which su) if [ X"$pid" = "X" ]; then echo "Error: cant find pid $host" else if [ ${AS_ADMIN} = "Yes" ]; then cmd="$SU $user -c \"kill -KILL $pid \"" eval $cmd else kill -KILL $pid fi if [ $? != 0 ]; then echo "Error: cant stop host $host" else if [ ${AS_ADMIN} = "Yes" ]; then cmd="$SU $user -c \"cd $dir; rm ${host}.pid \"" eval $cmd else (cd $dir; rm ${host}.pid) fi echo "Site $host stopped" fi fi } host_restart() { host=$1 host_stop $host host_start $host } # functions for bulk operations bulk_stop() { HOSTS=$(get_hosts) for app in $HOSTS ; do fcgi_manage $app stop done } bulk_start() { HOSTS=$(get_hosts) for app in $HOSTS ; do fcgi_manage $app start done } bulk_status() { HOSTS=$(get_hosts) for app in $HOSTS ; do fcgi_manage $app status done } bulk_restart() { HOSTS=$(get_hosts) for app in $HOSTS ; do fcgi_manage $app restart done }