Скрипт для перезапуска Django на виртуальном хостинге
Под перезапуском я в данном случае понимаю выполнение последовательности действий после которых FastCGI перечитывает заново все файлы и обновленные модели. Дело в том, что если просто удалить все *.pyc файлы в папке ~/django_projects/ это не всегда помогает, о причинах этого я писал в прошлом сообщении.
Я создал три скрипта: первый убивает все Python процессы, второй сохраняет в файл список всех запущенных процессов, и наконец последний скрипт, вызывает первые два, после чего убивает все *.pyc, *.pyo файлы.
- ~/cgi-bin/kill_python_34lJFxc.cgi
#!/bin/sh /usr/bin/pkill python
- ~/cgi-bin/ps_amMsxS9.cgi
#!/bin/sh /bin/ps -waxmu > /home/username/htdocs/zxX2m7.txt
#!/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 процессы окончательно помирают, и весь код заново перечитывается.