Esegui il servizio MongoDB come demone di SystemD su Ubuntu 15.10


12

MongoDB supporta solo le versioni di Ubuntu Long Term Support (LTS). L'ultimo è Ubuntu 14.04 LTS, in cui il processo di init è gestito da Upstart proprietario di Canonical. Comunque sto usando Ubuntu 15.10 con il processo init SystemD standard di Linux. Quindi non riesco ad avviare il servizio MongoDB all'avvio.

Quando leggo lo stato del servizio o provo ad avviarlo, mostra il messaggio "Impossibile caricare":

> 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.

Sto eseguendo MongoDB 3.2 Community Edition ufficiale (mongodb-org) da https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/ non il meta-pacchetto MongoDB 2.6 (mongodb) da Ubuntu repository.

> 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

Qualcuno sa come avviare MongoDB con SystemD?


1
il mio problema era un file di configurazione personalizzato che non stava biforcendo mongod, ecco lo snippet del mongod conf predefinito che mi mancava, processManagement: fork: true pidFilePath:
/var/run/mongod.pid

Risposte:


25

Sono riuscito ad avviare il servizio MongoDB con SystemD all'avvio:

Ho disinstallato il meta-pacchetto ufficiale (mongodb-org) v3.2, quindi ho installato il meta-pacchetto (mongodb) v2.6 dal repository Ubuntu:

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

Creare il file di configurazione del servizio come mostrato di seguito:

> 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

Verificare nell'elenco se il servizio è abilitato o disabilitato utilizzando il comando seguente:

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

Se è disabilitato o no nell'elenco, abilitarlo:

> sudo systemctl enable mongodb.service

Controlla di nuovo:

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

Ora è possibile gestire il servizio sul processo init SystemD:

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

Godere!


Consulta askubuntu.com/a/617869/43344 per un puntatore alle parti della definizione di servizio che hai perso. Si noti inoltre che le unità di servizio fornite e scritte dall'amministratore locale non devono entrare /lib.
JdeBP,

1
Quell'unità di servizio è stata scritta da Canonical, non da un amministratore locale, quindi devono risiedere nel /lib. Le parti della definizione del servizio sono abbastanza buone per avviare il servizio, le impostazioni aggiuntive non hanno un effetto significativo, quindi sono considerate complementari. Se aggiungi la PIDFile=/var/run/mongodb/mongod.pidriga e l' runistruzione on ExecStart=line, ricevi un errore, perché sto usando il meta-pacchetto 2.6 (mongodb), non il meta-pacchetto 3.2 (mongodb-org) 3.2.
Fernando Santucci,

1
Perché giù votato, ho votato. Ho anche affrontato un problema simile e questa risposta mi ha aiutato, grazie.
Tien Do,

Questo è stato molto utile per passare da Ubuntu 14 a 18, la mia unica aggiunta sarebbe che dovevo ricreare i dati e le directory dei registri e chownprima che mongod iniziasse tramite systemctl. Niente che i documenti di installazione non mi avrebbero detto, ma nel caso sia utile!
Tom J Nowell,

6

All'installazione predefinita dal repository MongoDB, per avere l'avvio automatico del servizio mongod , tutto ciò che devi fare è abilitare il servizio system.d:

systemctl enable mongod.service(prestare attenzione al nome del servizio mongo d , non a mongodb )

NOTA: questo è testato su Debian / GNU Jessie 8.x con systemd e Ubuntu Xerus 16.04 LTS.


Questo vale anche per Ubuntu Xerus 16.04 LTS. Dopo l'installazione dal repository ufficiale, è necessario abilitare l'unità di servizio systemd! L'ho appena confermato con un'altra installazione dell'istanza ... :)
stamster

1
Il file è presente nel /lib/systemd/system/mongod.servicemio Ubuntu 16.04
Jyotman Singh il

Sì, la definizione dell'unità di sistema è presente ma è disabilitata, quindi è necessario abilitarla per avviarla automaticamente ogni volta che si riavvia l'istanza.
criceto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.