Скрипт управления 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
Пример скрипта spawn.sh для сайта dumpz.org
Скрипт dja.sh
Проблему автозапуска сайтов после перезагрузки или каких-либо злоключений с демоном я решил просто и грубо - прописал в кроне вызов dja.sh каждые пять минут )
Такое расположение проектов позволяет мне легко управлять демонами этих сайтов.
Система управления состоит из трёх частей.
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




















Comments