Назад | Перейти на главную страницу

Почему Gunicorn не создает файл .sock или .pid?

Прежде всего, я хотел бы уточнить, что я полностью разбираюсь в отладке серверов и развертывании в целом. Я студент-разработчик своего университета, и до сих пор вся моя работа была связана с программированием, но на меня возложили ответственность за развертывание в моей команде.

Я пытаюсь развернуть наши приложения Django с помощью gunicorn и wsgi. Мой предыдущий босс (который с нами больше не работает) написал этот сценарий инициализации, который должен запустить сервер wsgi:

#! /bin/sh
# Do NOT "set -e"


# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin
PIDFILE=/tmp/site.edu.pid
PROJECT_DIR=/opt/project_name
PROC_NAME="project_name"
NAME=$PROC_NAME
VENV=/opt/envs/project_name
SOCK=/tmp/site.edu.sock
CMD="gunicorn project_name.wsgi:application --pid $PIDFILE --bind unix:$SOCK --workers 9 --name $PROC_NAME --preload --daemon --timeout 300 --error-logfile '-' --log-file '-'"
USER="www-data"

. $VENV/bin/activate;

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    if [ -e $PIDFILE ]; then
      return 1
    fi
    cd $PROJECT_DIR
    . $VENV/bin/activate
    $CMD
    if [ $? = 0 ]; then
      return 0
    else
      return 2
    fi

    sleep 1;
    chown $USER:nogroup $SOCK;
    chmod 660 $SOCK;

}

Насколько я понимаю, это должно запустить gunicorn и создать unix-сокет и pidfile в каталоге / tmp, а также запустить сервер, однако, похоже, это не так, поскольку эти файлы отсутствуют в каталоге / tmp ( вызывая 502 плохой шлюз в нашей конфигурации nginx).

Я также должен отметить, что это работает в виртуальной среде Python 2 (поскольку все они раньше развертывались с использованием python 2), но не в виртуальной среде python 3 (на сервере), но она работает локально в виртуальной среде python3.

Кроме того, у меня действительно есть один сайт, успешно работающий с использованием Python 3 и этой конфигурации, но я не могу понять, почему другие не работают (поскольку все их виртуальные среды имеют одинаковые требования и версии Gunicorn gunicorn==20.0.4)

Как уже упоминалось, у меня очень ограниченные знания о серверах, и я стараюсь учиться как можно лучше. Если бы кто-нибудь мог дать какие-либо советы по отладке.

Вот результат, когда я запускаю systemctl status working-site.edu.service

working-site.edu.service - LSB: working_project initscript
   Loaded: loaded (/etc/init.d/working-site.edu.sh; generated)
   Active: active (running) since Tue 2020-07-14 17:04:44 EDT; 1 day 19h ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 10 (limit: 4638)
   CGroup: /system.slice/working-site.edu.service
           ├─27489 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27493 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27494 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27495 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27496 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27497 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27498 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27499 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           ├─27500 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid
           └─27501 /opt/envs/working_project/bin/python3.6 /opt/envs/working_project/bin/gunicorn working_project.wsgi:application --pid

Jul 14 17:04:44 staging-server systemd[1]: Starting LSB: working_project initscript...
Jul 14 17:04:44 staging-server systemd[1]: Started LSB: working_project initscript.

Против, когда я бегу systemctl status broken-site.edu.service

broken-site.edu.service - LSB: broken_project initscript
   Loaded: loaded (/etc/init.d/broken-site.edu.sh; generated)
   Active: active (exited) since Thu 2020-07-16 12:51:26 EDT; 15min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 32425 ExecStart=/etc/init.d/broken-site.edu.sh start (code=exited, status=0/SUCCESS)

Jul 16 12:51:26 staging-server systemd[1]: Starting LSB: broken_project initscript...
Jul 16 12:51:26 staging-server systemd[1]: Started LSB: broken_project initscript.

Я был бы признателен за любые советы по отладке на этом. Я пытаюсь изучить конфигурации серверов как можно лучше, но я был брошен в самую глубину этого, пытаясь собрать все воедино по ходу дела.

Спасибо!