Скрипт для перезапуска Django на виртуальном хостинге

в разделе Программирование | Метки: Django, Python, Hosting

Под перезапуском я в данном случае понимаю выполнение последовательности действий после которых FastCGI перечитывает заново все файлы и обновленные модели. Дело в том, что если просто удалить все *.pyc файлы в папке ~/django_projects/ это не всегда помогает, о причинах этого я писал в прошлом сообщении.

Я создал три скрипта: первый убивает все Python процессы, второй сохраняет в файл список всех запущенных процессов, и наконец последний скрипт, вызывает первые два, после чего убивает все *.pyc, *.pyo файлы.

  1. ~/cgi-bin/kill_python_34lJFxc.cgi

    #!/bin/sh
    /usr/bin/pkill python
  2. ~/cgi-bin/ps_amMsxS9.cgi

    #!/bin/sh
     
    /bin/ps -waxmu > /home/username/htdocs/zxX2m7.txt

  3. #!/bin/sh
    /usr/local/bin/wget -q -O /dev/null http://www.domain.ru/cgi-bin/kill_python_34lJFxc.cgi
    cd $HOME
    echo "wget kill_python script"
    /usr/local/bin/wget -q -O /dev/null http://www.domain.ru/cgi-bin/ps_amMsxS9.cgi
    echo "killing pyc files..."
    find ./ -name \*.pyc -type f -exec rm {} \;
     
    echo "killing pyo files..."
    find ./ -name \*.pyo -type f -exec rm {} \;
     
    /usr/bin/touch $HOME/python/lib/python2.4/site-packages/fcgi.py $HOME/domain.ru/dispatch.fcgi
    echo "touch dispatch.fcgi & fcgi.py"
    echo "Done"

После вызова этого скрипта можно обновлять сайт, при этом поначалу появляются ошибки 500, нужно несколько раз быстро (мне хватало 2-3 раз) обновить одну и ту же страницу после чего видимо все старые python процессы окончательно помирают, и весь код заново перечитывается.