#!/bin/bash # Configuration # SITE should be defined in parent script #SITE="pyjob" DIR="/web/$SITE" PID_FILE="${PIDFILE:-/var/run/www/$SITE.pid}" SOCKET_FILE="${SOCKET_FILE:-/var/run/www/$SITE.sock}" ERRLOG_FILE="${ERRLOG_FILE:-/var/log/www/$SITE-error-fcgi.log}" WORKERS="${WORKERS:-1}" THREADS="${THREADS:-1}" CHMOD="${CHMOD:-777}" DEFAULT_COMMAND="$DIR/manage.py runsuperfcgi socket=$SOCKET_FILE workers=$WORKERS threads=$THREADS daemonize=true pidfile=$PID_FILE errlog=$ERRLOG_FILE" COMMAND="${COMMAND:-$DEFAULT_COMMAND}" NOHUP="${NOHUP:-}" ACTION=$1 NEED_START="yes" PROCESS="" if [ -f $PID_FILE ]; then pid=$(cat $PID_FILE) if [ -n "$pid" ]; then if [ -e /proc/$pid ]; then PROCESS=$pid; fi if [ -n "$PROCESS" ]; then echo "Found active daemon with pid $pid" if [ "$ACTION" == "restart" -o "$ACTION" == "stop" ]; then # Kill all children for child in $(ps -o pid --ppid $pid --no-headers); do echo "Killing child process with pid $child" kill $child done # Kill parent process echo "Killing parent process with pid $pid" kill $pid # Wait for parent process termination for x in $(seq 1 30); do if [ -e /proc/$pid ]; then echo "Waiting for process termination: $x" sleep 0.1 else break fi done else NEED_START="no" fi fi fi fi if [ -z "$PROCESS" ]; then echo "No active daemon" fi if [ "$ACTION" == "stop" ]; then NEED_START="no" fi if [ "$NEED_START" == "yes" ]; then if [ -e $SOCKET_FILE ]; then echo "Deleting old socket $SOCKET_FILE" rm $SOCKET_FILE fi if [ -n "$NOHUP" ]; then echo "Starting daemon in background with command:" echo $COMMAND COMMAND="nohup $COMMAND" $COMMAND & echo $! > $PID_FILE # Wait for socket file for x in $(seq 1 30); do if [ -e $SOCKET_FILE ]; then break else echo "Waiting for socket file" sleep 0.1 fi done else echo "Starting daemon with command:" echo $COMMAND $COMMAND fi chmod $CHMOD $SOCKET_FILE fi