Я использую Arch Linux. Я пытаюсь подготовить gunicorn daemon для подключения к nginx. Но все равно получаю ошибки
● gunicorn_yogavidya.service - Yogavidya gunicorn daemon
Loaded: loaded (/usr/lib/systemd/system/gunicorn_yogavidya.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2016-06-01 20:28:39 BST; 9s ago
Process: 1301 ExecStart=/html/public_html/yogavidya/gunicorn_start.sh (code=exited, status=203/EXEC)
Main PID: 1301 (code=exited, status=203/EXEC)
Jun 01 20:28:39 ytsejam systemd[1]: Started Yogavidya gunicorn daemon.
Jun 01 20:28:39 ytsejam systemd[1]: gunicorn_yogavidya.service: Main process exited, code=exited, status=203/EXEC
Jun 01 20:28:39 ytsejam systemd[1]: gunicorn_yogavidya.service: Unit entered failed state.
Jun 01 20:28:39 ytsejam systemd[1]: gunicorn_yogavidya.service: Failed with result 'exit-code'.
Это мой служебный файл:
[Unit]
Description=Yogavidya gunicorn daemon
[Service]
Type=simple
User=ytsejam
ExecStart=/html/public_html/yogavidya/gunicorn_start.sh
[Install]
WantedBy=multi-user.target
иgunicorn_start.sh
#!/bin/bash
NAME="yogavidya" #Name of the application (*)
DJANGODIR=/html/public_html/yogavidya/src # Django project directory (*)
SOCKFILE=/html/public_html/yogavidya/run/gunicorn.sock # we will communicate using this unix socket (*)
USER=ytsejam # the user to run as (*)
GROUP=webdata # the group to run as (*)
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn (*)
DJANGO_SETTINGS_MODULE=yogavidya.settings # which settings file should Django use (*)
DJANGO_WSGI_MODULE=yogavidya.wsgi # WSGI module name (*)
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /html/public_html/yogavidya/venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /html/public_html/yogavidya/venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user $USER \
--bind=unix:$SOCKFILE
Как это решить?
решение1
Упс, gunicorn
запускается как:
$ gunicorn [OPTIONS] APP_MODULE
И ты это сделал.
$ gunicorn APP_MODULE [OPTIONS]
Последняя часть вашего gunicorn_start.sh
сценария должна быть такой:
exec /html/public_html/yogavidya/venv/bin/gunicorn \
--name $NAME \
--workers $NUM_WORKERS \
--user $USER \
--bind=unix:$SOCKFILE \
${DJANGO_WSGI_MODULE}:application
Кстати, я также настоятельно рекомендую изменить:
SOCKFILE=/html/public_html/yogavidya/run/gunicorn.sock
к
SOCKFILE=/var/run/yogavidya_gunicorn.sock
В arch
(и еще паре дистрибутивов) /run
есть tmpfs, который установлен исключительно в памяти. Сокет UNIX, который никогда не обращается к файловой системе, работает гораздо быстрее.