Relatado nos comentários da edição # 120:
Não sei se isso foi resolvido de alguma forma no branch master, mas na versão 3.1.1, alguém removeu acidentalmente um diretório de log em nosso servidor e o supervisor simplesmente parou de funcionar, levando todos os outros programas com ele, não apenas aquele com o diretório de log ausente.
Eu também vi e fiquei incomodado com esse comportamento. Acho que o comportamento correto é criar logdir se possível e, no mínimo, não deve ser permitido travar outras tarefas
Eu também vi e fiquei incomodado com esse comportamento.
Quando isso ocorre? O comentário original não é específico. Ocorre uma falha quando stdout_logfile
em uma seção [program:x]
especifica um diretório de log que não existe? Qual versão do Supervisor você está usando?
Acho que o comportamento correto é criar logdir se possível
Não uso nenhum outro programa que tenha um comportamento assim. supervisord
não tem informações suficientes para criar automaticamente um diretório de log, uma vez que não sabe qual usuário deve ser o proprietário do diretório ou quais devem ser as permissões. Acho que a única coisa que ele pode fazer sem criar um monte de opções para tudo isso é mostrar uma mensagem de erro clara quando um diretório de log não existe.
no mínimo, não deve ser permitido travar outras tarefas
Concordo que adicionar uma seção [program:x]
onde stdout_logfile
ou stderr_logfile
especifica um diretório que não existe não deve travar supervisord
.
Ocorre um travamento quando stdout_logfile em uma seção [program: x] especifica um diretório de log que não existe? Qual versão do Supervisor você está usando?
sim. Algum problema em 3.1.3 para mim.
Corrigido em fd22ca89ff353fbe92845e9d2517645e6cf149ac. Esta correção será incluída no Supervisor 3.2.
Veja como duplicá-lo e verificar se ele foi corrigido. Mínimo supervisord.conf
:
[supervisord]
logfile = /tmp/supervisord.log
[inet_http_server]
port = 127.0.0.1:9001
[supervisorctl]
serverurl = http://127.0.0.1:9001
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false
O diretório de log deve existir ou supervisord
se recusará a iniciar. Crie o diretório de registro e inicie supervisord
em primeiro plano com essa configuração:
$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508
Remova o diretório de registro enquanto supervisord
ainda está em execução:
$ rmdir /thelogdir
Tente iniciar o processo:
$ supervisorctl -c /path/to/supervisord.conf
cat STOPPED Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat FATAL unknown error making dispatchers for 'cat': ENOENT
Comentários muito úteis
Corrigido em fd22ca89ff353fbe92845e9d2517645e6cf149ac. Esta correção será incluída no Supervisor 3.2.
Veja como duplicá-lo e verificar se ele foi corrigido. Mínimo
supervisord.conf
:O diretório de log deve existir ou
supervisord
se recusará a iniciar. Crie o diretório de registro e iniciesupervisord
em primeiro plano com essa configuração:Remova o diretório de registro enquanto
supervisord
ainda está em execução:Tente iniciar o processo: