Я пытаюсь (уже неделю!) запустить django-приложение на проде. Вот уже все этапы пройдены, выхожу на финишную прямую! :D Я могу нормально запускать с gunicorn приложение, nginx раздает статику, все ок. Теперь мне надо чтобы оно собственно работало постоянно, а не только когда я его с консоли запустил. Нагуглил много разных демонов для этого (следящих за запущенностью гуникорна), но больше всего мне понравился
runit. Очень уж просто все - кидается sh скрипт, в котором задается команда для запуска. Что мне особенно удобным показалось это то что тут именно скрипт, а не конфиг. Можно задать переменные для команды (она довольно длинная выходит).
Так вот в чем проблема: он то работает то нет. Иногда я запускаю и все с первого раза работает. Потом я что-то меняю (не в скрипте runit, а проекте или конфиге нжинкса) и он перестает запускаться. :(
Причем вручную с консоли я все также могу запустить гуникорн без проблем. И даже когда я просто запускаю этот самый sh скрипт с консоли (который должен запускать runit) это работает отлично. Но когда я пытаюсь сделать "sv start myapp" (или restart) то пишет "timeout: down: myapp: 1s, normally up, want up" или еще интереснее "ok: run: myapp: (pid 49720) 0s", но при этом ничего не запускается и статус остается down (можно проверить командой sv status myapp или посмотреть в файле stat который создает runit). Самое главное я не пойму пишет ли он какие-то логи? Где их можно посмотреть? В syslog пусто. Как понять чего ему надо? Почему иногда он стартует нормально, а иногда тупит?
Так выглядит мой run (скрипт запуска для runit):
#!/bin/sh
GUNICORN=/root/.virtualenvs/certificate_generator/bin/gunicorn
ROOT=/var/www/sup78user/data/www/certificate_generator
PID=$ROOT/run/gunicorn.pid
ACCESS_LOG=$ROOT/logs/gunicorn-access.log
ERROR_LOG=$ROOT/logs/gunicorn-error.log
APP=certificate_generator.wsgi:application
if [ -f $PID ]; then rm $PID; fi
exec $GUNICORN \
--access-logfile $ACCESS_LOG \
--error-logfile $ERROR_LOG \
--pid $PID \
--bind :8000 \
--chdir $ROOT \
$APP