Supervisor: Falha se o diretório de log não existir

Criado em 3 jul. 2015  ·  4Comentários  ·  Fonte: Supervisor/supervisor

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.

logging

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 :

[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

Todos 4 comentários

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
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Siecje picture Siecje  ·  5Comentários

AlphaSRE picture AlphaSRE  ·  3Comentários

eromoe picture eromoe  ·  3Comentários

meshy picture meshy  ·  4Comentários

kootenpv picture kootenpv  ·  3Comentários