systemdデーモンでgunicornを実行する方法

systemdデーモンでgunicornを実行する方法

私はアーチLinuxを使用しています。 nginxに接続するためにgunicornデーモンを準備しようとしています。しかし、まだエラーが発生します。

● 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ソケットは、はるかに高速です。

おすすめ記事