Execute o serviço MongoDB como daemon do SystemD no Ubuntu 15.10

12

O MongoDB suporta apenas versões do Ubuntu Long Term Support (LTS). O último é o Ubuntu 14.04 LTS, onde o processo init é gerenciado pelo Upstart, proprietário da Canonical. No entanto, estou usando o Ubuntu 15.10 com o processo de inicialização SystemD padrão do Linux. Portanto, não consigo iniciar o serviço MongoDB na inicialização.

Quando leio o status do serviço ou tento iniciá-lo, mostro a mensagem "falha ao carregar":

> systemctl status mongod
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
> sudo systemctl start mongod
Failed to start mongod.service: Unit mongod.service failed to load: No such file or directory.

Estou executando o MongoDB 3.2 Community Edition oficial (mongodb-org) em https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/ e não o meta-pacote MongoDB 2.6 (mongodb) do Ubuntu repositório.

> sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
> echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
> sudo apt-get update
> sudo apt-get install -y mongodb-org

Alguém sabe como iniciar o MongoDB com o SystemD?

Fernando Santucci
fonte
1
meu problema era um arquivo de configuração personalizada que não foi bifurcação mongod, aqui está o trecho do conf mongod padrão que eu estava faltando, processManagement: garfo: true pidFilePath: /var/run/mongod.pid
Pykler

Respostas:

25

Eu consegui iniciar o serviço MongoDB com o SystemD na inicialização:

Desinstalei o meta-pacote oficial (mongodb-org) v3.2 e instalei o meta-pacote (mongodb) v2.6 do repositório Ubuntu:

> sudo apt-get remove mongodb-org
> sudo apt-get install mongodb

Crie o arquivo de configuração do serviço, como mostrado abaixo:

> cd /lib/systemd/system
> sudo touch mongodb.service
> sudo nano mongodb.service
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf

[Install]
WantedBy=multi-user.target

Verifique na lista se o serviço está ativado ou desativado usando o comando abaixo:

> systemctl list-unit-files --type=service
...
mongodb.service             disabled
...

Se estiver desabilitado ou não estiver na lista, habilite-o:

> sudo systemctl enable mongodb.service

Verifique novamente:

> systemctl list-unit-files --type=service 
...
mongodb.service             enabled
...

Agora você pode gerenciar o serviço no processo de inicialização do SystemD:

> systemctl status mongodb
> sudo systemctl stop mongodb
> sudo systemctl start mongodb
> sudo systemctl restart mongodb

Desfrutar!

Fernando Santucci
fonte
Consulte askubuntu.com/a/617869/43344 para obter um ponteiro para as partes da definição de serviço que você perdeu. Observe também que as unidades de serviço fornecidas e gravadas pelo administrador local não devem entrar /lib.
JdeBP
1
Essa unidade de serviço foi escrita pela Canonical, não por um administrador local, então eles devem residir na /lib. As partes da definição de serviço são boas o suficiente para iniciar o serviço; as configurações adicionais não têm efeito significativo; portanto, são consideradas complementares. Se você adicionar a PIDFile=/var/run/mongodb/mongod.pidlinha e as runinstruções on- ExecStart=line, você receberá um erro, porque estou usando o meta-pacote (mongodb) 2.6, não o meta-pacote (mongodb-org) 3.2.
Fernando Santucci 23/03
1
Por que votou para baixo, eu votei. Eu também enfrentei um problema semelhante e essa resposta ajudou, obrigado.
Tien Do
Isso foi super útil para mudar do Ubuntu 14 para o 18, minha única adição seria a necessidade de recriar os diretórios de dados e log e chowneles antes que o mongod iniciasse através do systemctl. Nada que os documentos de instalação não tivessem me contado, mas, caso seja útil!
Tom J Nowell
6

Na instalação padrão do repositório MongoDB, para ter a inicialização automática do serviço mongod , tudo o que você precisa fazer é ativar o serviço system.d:

systemctl enable mongod.service(preste atenção no nome do serviço mongo d , não no mongodb )

NOTA: isso é testado no Debian / GNU Jessie 8.x com systemd e no Ubuntu Xerus 16.04 LTS.

stamster
fonte
Isso também vale para o Ubuntu Xerus 16.04 LTS. Após a instalação do repositório oficial, você precisa ativar a unidade de serviço systemd! Eu apenas confirmou com outra instalação exemplo ... :)
stamster
1
O arquivo está presente em /lib/systemd/system/mongod.serviceno meu Ubuntu 16.04
Jyotman Singh
Sim, a definição da unidade systemd está lá, mas está desativada; portanto, é necessário ativá-la para que seja iniciada automaticamente sempre que você reiniciar sua instância.
Stamster