Por que o Upstart não está iniciando o uWSGI?

2

Estou tentando montar um projeto de django no meu VPS. Eu estou tentando fazer um Imperador uWSGI correr e assim gerar vassalos. Eu configurei todos os meus arquivos de configuração como sugerido por inúmeros sites, incluindo a documentação do uWSGI. Ainda quando eu corro o comando de arquivo

paul@example:/$ sudo service uwsgi start
Eu recebo o seguinte:
start: Unknown job: uwsgi

Eu percebi que isso era porque o Upstart não podia reconhecer o arquivo uwsgi.conf link I tem em / etc / init /. Mas após revisão não consigo encontrar nada de errado com isso.

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

Também verifiquei meus arquivos / etc / uwsgi / vassals para ter certeza de que eles estavam funcionando corretamente. Meu único arquivo agora é um arquivo 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()

Mas isso parece certo para mim também.

Finalmente, para testar e ver se o uWSGI executaria a partir da linha de comando, iniciei sem o Upstart. Eu corri

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

e funcionou:

*** 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)

Então fiquei sem um aviso rápido. O uWSGI cli mostra todas as solicitações do servidor e não retorna para permitir que eu digite outro comando. Eu realmente sinto que deve haver uma maneira melhor de fazer isso (também conhecido como 'sudo service uwsgi start / restart'), mas não sei como. Eu olhei para este postar mas estou Não tenho certeza se um runlevel diferente resolveria o problema em questão.

    
por Paul 28.07.2013 / 00:49

3 respostas

4

Descobrir. Não tenho certeza se sei como. Acho que foi a parte LOGTO do arquivo uwsgi.conf que não funcionou. Este é o meu arquivo imperador do uwsgi agora:

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

E este é meu vassalo, ie. 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

Ainda trabalhando em como limpá-lo, mas funciona como uma beleza.

    
por 31.07.2013 / 18:28
3

O trabalho é inválido - basta executar ' init-checkconf job.conf ' e ele informará qual é o problema:

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

Em resumo, você não pode ter espaços entre a chave e o valor em uma sub-rotina env. Veja init (5) para a sintaxe da sub-rotina.

    
por 29.07.2013 / 18:22
0

Enquanto uma pergunta antiga, eu suspeito que eu passei as últimas horas batendo minha cabeça em uma parede para o mesmo problema. Para mim, o uWSGI estava tentando trabalhar com um arquivo em uma pasta na qual ele não tinha permissões. Um chmod simples no diretório em questão consertava tudo (os arquivos de log para mim). A questão estava constantemente aparecendo para ser outra coisa, mas no final foi o suficiente. Pode não ser a verdadeira resposta para o seu problema, mas espero que ajude alguém a sofrer como eu.

    
por 12.05.2016 / 01:58