Führen Sie den MongoDB-Dienst als Dämon von SystemD unter Ubuntu 15.10 aus

12

MongoDB unterstützt nur Versionen von Ubuntu Long Term Support (LTS). Das letzte ist Ubuntu 14.04 LTS, wo der Init-Prozess von Upstart verwaltet wird, das Eigentum von Canonical ist. Allerdings benutze ich Ubuntu 15.10 mit dem Linux-Standard-SystemD-Init-Prozess. Daher kann ich den MongoDB-Dienst beim Booten nicht starten.

Wenn ich den Dienststatus lese oder versuche, ihn zu starten, wird die Meldung "Fehler beim Laden" angezeigt:

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

Ich verwende die offizielle MongoDB 3.2 Community Edition (mongodb-org) von https://docs.mongodb.org/master/tutorial/install-mongodb-on-ubuntu/, nicht das MongoDB 2.6-Metapaket (mongodb) von 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

Weiß jemand, wie man die MongoDB mit SystemD startet?

Fernando Santucci
quelle
1
Mein Problem war eine benutzerdefinierte Konfigurationsdatei, die kein Mongod gab. Hier ist das Snippet aus der Standardkonfiguration für Mongod, das mir fehlte: processManagement: fork: true pidFilePath: /var/run/mongod.pid
Pykler

Antworten:

25

Ich habe es geschafft, den MongoDB-Dienst beim Booten mit SystemD zu starten:

Ich habe das offizielle Metapaket (mongodb-org) v3.2 deinstalliert und dann das Metapaket (mongodb) v2.6 aus dem Ubuntu-Repository installiert:

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

Erstellen Sie die Service-Konfigurationsdatei wie folgt:

> 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

Überprüfen Sie in der Liste mit dem folgenden Befehl, ob der Dienst aktiviert oder deaktiviert ist:

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

Wenn es in der Liste deaktiviert ist oder nicht, aktivieren Sie es:

> sudo systemctl enable mongodb.service

Nochmal Überprüfen:

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

Jetzt können Sie den Dienst auf dem SystemD-Init-Prozess verwalten:

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

Genießen!

Fernando Santucci
quelle
Unter askubuntu.com/a/617869/43344 finden Sie einen Verweis auf die Teile der Service-Definition, die Sie verpasst haben. Beachten Sie auch , dass die Serviceeinheiten vom lokalen Administrator geliefert und geschrieben sollen nicht hineingehen /lib.
JdeBP
1
Diese Serviceeinheit wurde von Canonical und nicht von einem lokalen Administrator erstellt. Sie muss sich in der befinden /lib. Die Teile der Service-Definition sind gut genug, um den Service zu starten. Die zusätzlichen Einstellungen haben keine nennenswerten Auswirkungen und werden daher als komplementär angesehen. Wenn Sie die PIDFile=/var/run/mongodb/mongod.pidZeile und die runAnweisung ExecStart=online hinzufügen , erhalten Sie eine Fehlermeldung, da ich (mongodb) Metapaket 2.6 verwende, nicht das (mongodb-org) Metapaket 3.2.
Fernando Santucci
1
Warum runtergestimmt, habe ich hochgestimmt. Ich hatte auch ein ähnliches Problem und diese Antwort half, danke.
Tien Do
Das war sehr hilfreich, wenn ich von Ubuntu 14 auf 18 chownumgestiegen bin. Meine einzige Neuerung war , dass ich die Daten- und Protokollverzeichnisse neu erstellen musste, bevor mongod über systemctl starten konnte. Nichts, was mir die Installationsdokumentation nicht gesagt hätte, aber für den Fall, dass es hilfreich ist!
Tom J Nowell
6

Bei der Standardinstallation aus dem MongoDB-Repository müssen Sie nur den system.d- Dienst aktivieren , damit der mongod- Dienst automatisch gestartet wird:

systemctl enable mongod.service( Achten Sie auf den Namen des mongo d- Dienstes, nicht auf mongodb )

HINWEIS: Dies wird auf Debian / GNU Jessie 8.x mit systemd und Ubuntu Xerus 16.04 LTS getestet.

Stempel
quelle
Dies gilt auch für Ubuntu Xerus 16.04 LTS. Nach der Installation vom offiziellen Repository müssen Sie systemd service unit aktivieren! Ich habe es gerade mit einer anderen Instanz-Installation bestätigt ... :)
stamster
1
Die Datei ist /lib/systemd/system/mongod.servicein meinem Ubuntu 16.04
Jyotman Singh 12.04.17
Ja, die Definition der Systemeinheit ist vorhanden, sie ist jedoch deaktiviert. Sie müssen sie daher aktivieren, damit sie bei jedem Neustart Ihrer Instanz automatisch gestartet wird.
Stempel