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

Почему Upstart не запускает uWSGI?

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

paul@example:/$ sudo service uwsgi start
I get the following:

start: Unknown job: uwsgi

Я подумал, это потому, что Upstart не может распознать файл uwsgi.conf http://uwsgi-docs.readthedocs.org/en/latest/Upstart.html У меня в / etc / init /. Но после просмотра не могу найти в этом ничего плохого.

paul@example:/etc/init$ sudo vim uwsgi.conf
# Emperor uWSGI script

pre-start script
    logger "pre-start for uWSGI Emperor"
end script

post-start script
    logger "post-start for uWSGI Emperor"
end script

description "uWSGI Emperor"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

env LOGTO = /var/log/uwsgi.log

exec /usr/local/bin/uwsgi --master --die-on-term --emperor /etc/uwsgi/vassals --logto $LOGTO

Я также проверил свои файлы / etc / uwsgi / vassals, чтобы убедиться, что они в рабочем состоянии. Мой единственный файл сейчас - это файл mysite.ini:

paul@example:/etc/uwsgi/vassals$ sudo vim mysite.ini 
[uwsgi]
base = /home/paul/djprojs/mysite/
chdir = %(base)
master = true
threads = 20
socket = /tmp/sockets/%n.sock
home = /home/paul/.virtualenvs/dj
env = DJANGO_SETTINGS_MODULE=%n.settings
module = django.core.handlers.wsgi:WSGIHandler()

Но мне это тоже кажется нормальным.

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

paul@exmaple/$ uwsgi --emperor /etc/uwsgi/vassals

и это сработало:

*** Starting uWSGI 1.9.13 (32bit) on [Sat Jul 27 19:23:43 2013] ***
compiled with version: 4.6.3 on 21 July 2013 03:35:50
os: Linux-3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012
nodename: example.me
machine: i686
clock source: unix
detected number of CPU cores: 1
current working directory: /
detected binary path: /usr/local/bin/uwsgi
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 3922
your memory page size is 4096 bytes
detected max file descriptor number: 1024
*** starting uWSGI Emperor ***
*** has_emperor mode detected (fd: 6) ***
[uWSGI] getting INI configuration from mysite.ini
*** Starting uWSGI 1.9.13 (32bit) on [Sat Jul 27 19:23:43 2013] ***
compiled with version: 4.6.3 on 21 July 2013 03:35:50
os: Linux-3.2.0-24-virtual #37-Ubuntu SMP Wed Apr 25 12:51:49 UTC 2012
nodename: example.me
machine: i686
clock source: unix
detected number of CPU cores: 1
current working directory: /etc/uwsgi/vassals
detected binary path: /usr/local/bin/uwsgi
your processes number limit is 3922
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
uwsgi socket 0 bound to UNIX address /tmp/sockets/mysite.sock fd 3
Python version: 2.7.3 (default, Apr 10 2013, 06:03:17)  [GCC 4.6.3]
Set PythonHome to /home/paul/.virtualenvs/dj
Python main interpreter initialized at 0x9bdb000
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 410112 bytes (400 KB) for 20 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x9bdb000 pid: 18213 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 18213)
spawned uWSGI worker 1 (pid: 18214, cores: 20)

Затем я остался без приглашения bash. UWSGI cli показывает все запросы сервера и не возвращается, чтобы я мог ввести другую команду. Я действительно чувствую, что должен быть лучший способ сделать это (также известный как «sudo service uwsgi start / restart»), но я не уверен, как это сделать. Я изучил это Почта но я не уверен, что другой уровень запуска решит проблему.

Выясни это. Хотя не уверен, что знаю как. Я думаю, что это была часть LOGTO файла uwsgi.conf, из-за которой он не работал. Это мой файл императора uwsgi:

description "uWSGI Emperor"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec uwsgi --emperor /etc/uwsgi/vassals/ --master --uid www-data --gid www-data --logto /var/log/uwsgi/emperor.log

А это мой вассал, т.е. mysite.ini

[uwsgi]
base = /home/paul/djprojs/mysite
chdir = %(base)
module = mysite.wsgi:application
pidfile = /tmp/uwsgi_vassal_%n.pid
socket = /tmp/sockets/%n.sock
vacuum = True
wsgi-file = /home/paul/djprojs/mysite/mysite/wsgi.py
home = /home/paul/.virtualenvs/dj

Все еще работает над тем, как его очистить, но он работает как красавчик.

Задание недействительно - просто запустите 'init-checkconf job.conf'и он скажет вам, в чем проблема:

ERROR: File /tmp/job.conf: syntax invalid:
init:aa.conf:18: Unexpected token

Таким образом, у вас не может быть пробелов между ключом и значением в строфе env. См. Синтаксис строфы в init (5).

Это старый вопрос, но подозреваю, что последние несколько часов я только что бил головой об стену по той же проблеме. Для меня uWSGI пытался работать с файлом в папке, в которой у него не было разрешений. Простой chmod в указанном каталоге исправил все (файлы журнала для меня). Проблема постоянно возникала в чем-то другом, но в конце концов это все, что требовалось. Возможно, это не верный ответ на вашу проблему, но, надеюсь, это поможет кому-то еще, страдающим, как я.