Скрипт управления django fastcgi процессами

У меня на хостинге сейчас запущено несколько сайтов на Django. Директория каждого django-проекта называется web_site и лежит в одноимённой домену директории. Например, этот блог находится в /web/web-brains.com/web_site.

Такое расположение проектов позволяет мне легко управлять демонами этих сайтов.

Система управления состоит из трёх частей.
1) скрипт /web/spawnlib.sh, который содержит базовые операции по запуску, остановке процессов
2) cкрипты /web/domain.com/web_site/spawn.sh. Каждый spawn.sh содержит информацию о том, в какой директории хранятся файлы сайта и где хранится socket-файл fastcgi-демона сайта. Управление конкретным сайтом (запуск/остановка) осуществляется через его spawn.sh
3) скрипт /web/dja.sh, который нужен для массового запуска/останова сайтов

А теперь код, из которого всё будет понятно.

Скрипт spawnlib.sh


PYTHON=/usr/local/bin/python
PIDFILE="/var/run/www/$SITE.pid"
SOCKFILE="/var/run/www/$SITE.sock"
COMMAND="$PYTHON ./manage.py runfcgi method=threaded socket=$SOCKFILE pidfile=$PIDFILE maxchildren=1000"
#COMMAND="$PYTHON ./manage.py runfcgi maxchildren=3 maxrequest=1000 minspare=1 maxspare=1 socket=$SOCKFILE pidfile=$PIDFILE"

usage() {
echo "$0 {start|stop|restart}"
exit 1
}

daemon_command() {
echo -n $COMMAND
}

daemon_pids() {
echo $(ps axwwo pid,command|grep "$(daemon_command)"|grep -v grep|cut -c 1-6)
}


start() {
PIDS=$(daemon_pids)
if [ -n "$PIDS" ]; then
echo "daemons already running"
else
echo "Loading daemons"
if [ ! -e $SITE_DIR ]; then
echo "$SITE_DIR does not exist"
else
cd $SITE_DIR
#echo $(daemon_command)
$(daemon_command)
fi
fi
}

stop() {
PIDS=$(daemon_pids)
if [ -n "$PIDS" ]; then
echo "Killing old daemons"
for pid in $PIDS; do
kill $pid
done
else
echo "No daemons running"
fi
}

pids() {
echo "pids: $(daemon_pids)"
}

restart() {
stop
sleep 2
start
}


action=$1
shift
case $action in
"start") start;;
"stop") stop;;
"pids") pids;;
"restart") restart;;
*) echo $(usage);;
esac


Пример скрипта spawn.sh для сайта dumpz.org


#!/bin/sh
SITE_DIR=/web/dumpz.org/web_site
SITE=dumpz.org

. /web/spawnlib.sh


Скрипт dja.sh


#!/bin/sh

WEB_DIR="/web"
DJANGO_DIRS="ozon adomsk.info dumpz.org pydev.ru web-brains.com pybb.org netdb.ru nashomsk.ru"

bulk_action() {
action=$1
for DIR in $DJANGO_DIRS; do
spawn_file="$WEB_DIR/$DIR/web_site/spawn.sh"
echo $spawn_file $action
if [ ! -f "$spawn_file" ]; then
echo "file $spawn_file does not exist"
else
$spawn_file $action
fi
done
}

usage() {
echo "Usage: $0 [start|stop|restart]"
exit 1
}

case $1 in
"start") bulk_action "start";;
"stop") bulk_action "stop";;
"restart") bulk_action "restart";;
*) usage;;
esac


Проблему автозапуска сайтов после перезагрузки или каких-либо злоключений с демоном я решил просто и грубо - прописал в кроне вызов dja.sh каждые пять минут )


*/5 * * * * /web/dja.sh start
Add post to:   Google Slashdot Yahoo Digg Technorati Delicious Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Yandex.ru Myscoop.ru 100zakladok.ru
Make comment

Comments

No comments for this post
comment submission form

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image