mongodb não é encerrado corretamente no desligamento do sistema

1

Quando eu desligo o Ubuntu rodando o mongodb (instalado via apt), ocasionalmente o mongodb parece não terminar de desligar completamente - o arquivo de log corresponde a um desligamento normal, fechando arquivos, limpando o diário etc. mas o arquivo [interruptThread] shutdown: removing fs lock... não está presente, e (sem surpresa) o mongodb se recusa a iniciar na próxima inicialização, reclamando de um arquivo de bloqueio obsoleto.

Parece-me que há um tempo limite para que os serviços sejam interrompidos por si mesmos, e que o mongodb seja morto à força.

O mongodb incorreto faz parte de um conjunto de réplicas que sincroniza os túneis ssh. Portanto, é possível que um soquete esteja travando e mantendo a limpeza final (incluindo a remoção do arquivo de bloqueio)?

O que posso fazer sobre isso? Posso definir um tempo limite maior para o desligamento do mongodb? Posso insistir para que o mongodb seja autorizado a morrer de forma limpa antes que os túneis ssh sejam mortos? Existe outra explicação que estou perdendo?

    
por drevicko 08.09.2013 / 12:21

1 resposta

3

Na verdade, há um limite no tempo que os serviços podem interromper. O Ubuntu usa upstart para iniciar e parar serviços, e o limite padrão do upstart para isso é de 5 segundos (veja a documentação do upstart no kill timeout ). Possivelmente resolverá seu problema se você aumentar esse tempo limite. Você tem que colocar a diretiva kill timeout mencionada no link no arquivo de configuração upstart para o mongodb. No Ubuntu 12.04, esse arquivo é encontrado em /etc/init/mongodb.conf . Você pode encontrar um arquivo inicial que contém a diretiva kill timeout na fonte mongodb atual . (No entanto, este arquivo pode não funcionar no seu sistema Ubuntu devido a diferentes caminhos.)

Eu tive o mesmo problema no Ubuntu 12.04 mesmo sem replicação, e para mim kill timeout 300 corrigiu o problema.

    
por Milan 29.12.2013 / 18:01