Гуникорн и Джанго с Upstart и Nginx
Прежде всего, у меня есть множество экземпляров Django, которые работают так:
В каждом проекте у меня есть script.sh shell script, который запускает gunicorn и т.д.:
#!/bin/bash
set -e
LOGFILE=/var/log/gunicorn/app_name.log
LOGDIR=$(dirname $LOGFILE)
NUM_WORKERS=3
# user/group to run as
USER=root
GROUP=root
PORT=8060
IP=127.0.0.1
cd /var/www/webapps/app_name
source ../bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
exec /var/www/webapps/bin/gunicorn_django -b $IP:$PORT -w $NUM_WORKERS \
--user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE
При запуске этого script из командной строки с bash script.sh сайт работает отлично, поэтому Nginx настроен правильно.
Как только я использую выскочку с службой app_name, запускается приложение, а затем просто останавливается. Он даже не записывает в файл журнала.
Это файл app_name.conf в /etc/init/app_name.conf:
description "Test Django instance"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec /var/www/webapps/app_name/script.sh
Так в чем проблема? Причина, запущенная из командной строки, работает, но выполнение выскочки не выполняется. И я не знаю, где посмотреть, что не так?
Ответы
Ответ 1
Ну, я понял это. Если кто-нибудь сталкивается с чем-то вроде этого...
В основном это недостаток знаний о скриптах оболочки, которые меня удерживали.
После комментирования каждой строки файла script я обнаружил проблему с линией: source../bin/activate и все после этого.
Проблема состояла в том, что перед ним было 2 пространства, и теперь я знаю, что ее нужно полностью выровнять. Теперь он работает.
Вот как я понял это:
tail -f /var/log/syslog
Jun 26 10:54:59 saturn7 init: app_name main process (3521) terminated with status 127
Я узнал, что статус 127 - это в основном команда, которая не найдена. Поэтому я знаю, что проблема была в файле script.
Но я не уверен, почему bash./script.sh будет работать и не скажет мне, что что-то не так? Мне нужно прочитать о скриптах Schell..