Supervisor não carregando novos arquivos de configuração

63

Eu tenho um problema ao implantar o aplicativo Django usando Gunicorn e Supervisor. Enquanto eu posso fazer o Gunicorn servindo meu aplicativo (definindo o PYTHONPATH correto e executando o comando apropriado, aquele da configuração do supervisord) eu não posso fazer o supervisor rodá-lo. Apenas não verá meu aplicativo. Eu não sei como ter certeza se o arquivo de configuração está ok.

Veja o que o supervisorctl diz:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)

Eu estou rodando no Ubuntu 10.04 com a seguinte configuração:

Arquivo /home/myapp/live/deploy/supervisord_live.ini:

[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true

Em /etc/supervisor/supervisord.conf, no final do arquivo, há:

[include]
files = /etc/supervisor/conf.d/*.conf

e aqui está um link simbólico para o meu arquivo de configuração:

# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root   48 Dec  4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini

tudo parece bem para mim, mas supervisorctl apenas continue dizendo myapp_live: ERROR (no such process) . Alguma solução para isso?

    
por grucha 11.12.2010 / 09:48

12 respostas

28

Eu tive o mesmo problema, um

sudo service supervisord reload

fez o truque, embora eu não saiba se essa é a resposta para sua pergunta.

    
por 20.12.2010 / 15:34
186

A resposta correta é que o supervisor exige que você leia e novamente quando você colocar um novo arquivo de configuração. Reiniciar não é a resposta, pois isso afetará outros serviços. Experimente:

supervisorctl reread
supervisorctl update
    
por 17.02.2013 / 21:03
15

Verifique se os arquivos conf do supervisor terminam em .conf

Demorei um tempo para descobrir isso. Espero que ajude a próxima pessoa.

    
por 11.10.2014 / 01:55
14

Recarregar o processo do supervisor mestre pode funcionar, mas ele terá efeitos colaterais indesejados se você tiver mais de um processo sendo monitorado pelo supervisor.

A maneira correta de fazer isso é emitir supervisorctl reread , o que faz com que ele verifique os arquivos de configuração em busca de alterações:

root@debian:~# supervisorctl reread
gunicorn: changed

Em seguida, basta recarregar esse aplicativo:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started
    
por 29.04.2012 / 09:39
5

Eu encontrei este problema usando o pacote de supervisor, versão 3.0a8-1.1 do Ubuntu Server 12.10. Acabei resolvendo o problema lendo a ajuda integrada:

$ sudo supervisorctl help restart
restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes

Em particular, você quer usar a sintaxe:

sudo supervisorctl restart myapp_live:*

Como a documentação declara em link - "A seção [program: x] na verdade representa um" homogêneo grupo de processo ”para o supervisor (a partir de 3.0)." Então, talvez o problema tenha surgido pela primeira vez na versão 3.0.

PS: sou novo no supervisor; Estou usando o link como um exemplo do que uma configuração mínima deve parece.

    
por 10.10.2013 / 03:23
4

Eu tive um problema semelhante ( myapp_live: ERROR (no such process) ) e foi porque minha definição de processo era

[program: myapp_live]

quando deveria ter sido

[program:myapp_live]

Embora isso não resolva a pergunta que foi feita, eu fui liderado aqui pela Pesquisa que está procurando uma solução para o meu problema, então espero que outras pessoas também o encontrem aqui.

    
por 02.06.2013 / 03:46
2

Eu achei esta solução mais conveniente:

EDIT: antes de fazer isso, verifique seu caminho de supervisorctl usando which supervisorctl para ter certeza de que você está adicionando o caminho certo para os sudoers.

Adicione esta linha ao arquivo sudoers usando visudo (onde: myappuser - o usuário que precisa reiniciar seu aplicativo, myapp - nome do aplicativo):

myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp

E então simplesmente:

sudo supervisorctl restart myapp

Você não está preso aos scripts de inicialização da distribuição e concede privilégios bastante restritos ao usuário que está reiniciando seu aplicativo gunicorn. Além disso, você não precisa se preocupar com pid. O comando não pedirá senha, por isso é adequado para scripts bash / fabric de auto-implantação. Por outro lado - você deve estar ciente de que, se supervisorctl estiver vulnerável a algum bug que causa execução de código, um usuário mal-intencionado poderia usar esse privilégio sudo para executar código como root (mas, até onde eu sei, nenhum bug foi descoberto para supervisord e é uma grande coisa encontrar essa vulnerabilidade).

    
por 31.07.2012 / 11:00
2

Lendo o código do supervisorctl.py aqui: link

Você pode ver que supervisorctl update (função do_update) está chamando reloadConfig () exatamente como supervisorctl reler (função do_reread).

Então, eu acho que chamar a releitura não é necessário se você chamar a atualização depois dela.

A saída do git blame tem sido assim desde pelo menos desde julho de 2009.

    
por 04.03.2015 / 02:55
1

Descobri que os scripts init.d não são confiáveis em uma variedade de versões diferentes do Ubuntu / Debian. A maneira de fazer isso é isso:

sudo supervisorctl reload
    
por 25.04.2012 / 01:13
1

Tenha cuidado com links simbólicos e inclua arquivos no Supervisor. Ele permitiria que qualquer pessoa com privilégio em /home/myapp/live/deploy/supervisord_live.ini altere o arquivo ini e inicie qualquer código malicioso. Esses arquivos ini devem estar dentro do diretório conf do supervisor ou em qualquer subdiretório abaixo dele.

    
por 03.02.2015 / 22:30
1

Aqui está uma lista de verificação:

  1. O novo arquivo de configuração deve ser nomeado de acordo com o padrão de inclusão configurado em /etc/supervisord.conf:

    [include]
    files=supervisord.d/*.ini
    

    Como vemos no meu caso, spam.ini seria incluído, mas o spam.conf não.

  2. Se você criou o novo arquivo copiando um antigo, certifique-se de alterar realmente a linha [program:] . Porque se você for tão estúpido quanto ter dois arquivos para o mesmo programa, supervisorctl reread deixará você com essa mensagem de erro sem esperança como punição:

    No config updates to processes
    
  3. Se o seu arquivo for detectado, supervisorctl reread deve dizer algo como:

    spam: available
    
  4. Em seguida, supervisorctl update spam deve iniciá-lo e torná-lo exibido em supervisorctl status .

por 05.12.2016 / 16:35
0

Eu tinha instalado o supervisrod com o yum install, que instalava o supervisor da versão v2. *. Supervisor suporta external includes apenas da versão 3. Teve que usar o easy_install em vez disso, para instalar o supervisor v3.

    
por 21.05.2014 / 10:40