web-dev-qa-db-de.com

MongoDB auf Ubuntu wird nicht als Dienst gestartet, nichts im Protokoll

Betreibe MongoDB 2.2 auf Ubuntu und wenn ich renne:

Sudo mongod

Ich erhalte eine Fehlermeldung, dass/data/db nicht gefunden werden kann. Die Datenbank befindet sich nicht dort. In mongod.conf ist der Datenbankpfad als Ubuntu 10gen-Standardwert /var/lib/mongodb angegeben, in dem sich die Datenbank befindet. Scheint, als würde mongod die conf-Datei nicht finden. Also wenn ich renne:

Sudo mongod -f /etc/mongodb.conf

Der Server wird ordnungsgemäß gestartet, und die Ausgabe wird in der Protokolldatei protokolliert: /var/log/mongodb/mongodb.log. Alles ist glücklich. Ich kann zu einer anderen Shell wechseln, mich bei Mongo Shell anmelden, die Datenbanken anzeigen und Abfragen ausführen.

Also kündige ich das und versuche, als Dienst zu laufen:

> Sudo status mongodb
mongodb stop/waiting
> Sudo start mongodb
mongodb start/running, process 10468

Sieht bisher gut aus, aber der Mongo-Server wurde nicht gestartet. Ein anderes ausführen:

> Sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB Shell version: 2.2.0
connecting to: test
Sat Sep  1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/Shell/mongo.js:91
exception: connect failed

"test" ist nicht die richtige Datenbank und in der Protokolldatei wird nichts angezeigt.

Ich weiß nicht, was falsch sein könnte. Ich habe die Upstart-Skripte überprüft und sie scheinen in Ordnung zu sein. /etc/init/mongodb.conf läuft:

mongodb --exec  /usr/bin/mongod -- --config /etc/mongodb.conf
46
BishopZ

OK, das alles hängt von den Berechtigungen ab, aber nehmen wir es Schritt für Schritt. Wenn Sie Sudo mongod ausführen, wird keine Konfigurationsdatei geladen, sondern es beginnt buchstäblich mit dem in den Standardeinstellungen - Port 27017 , Datenbankpfad von/data/db usw. kompilierten Fehler, dass der Ordner nicht gefunden werden kann. Der "Ubuntu-Standard" wird nur verwendet, wenn Sie auf die Konfigurationsdatei zeigen (wenn Sie den Dienstbefehl verwenden, wird dies für Sie hinter den Kulissen erledigt).

Als Nächstes haben Sie es so ausgeführt:

Sudo mongod -f /etc/mongodb.conf

Wenn vorher keine Probleme aufgetreten sind, wird es jetzt - Sie haben den Prozess mit Ihrer normalen Konfiguration (die auf Ihren üblichen DB-Pfad und das Protokoll zeigt) als Rootbenutzer ausgeführt. Das bedeutet, dass sich in diesem normalen MongoDB-Ordner jetzt eine Reihe von Dateien mit der Benutzergruppe: root:root befindet. 

Dies führt zu Fehlern, wenn Sie versuchen, es als normaler Dienst erneut zu starten, da der mongodb-Benutzer (unter dem der Dienst versuchen wird, als auszuführen) keine Berechtigung zum Zugriff auf diese root:root-Dateien haben wird in die Protokolldatei schreiben, um Ihnen Informationen zu geben. 

Um es als normalen Dienst auszuführen, müssen wir diese Berechtigungen korrigieren. Stellen Sie zunächst sicher, dass MongoDB derzeit nicht als Root ausgeführt wird.

cd /var/log/mongodb
Sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
Sudo chown -R mongodb:mongodb .

Das sollte das Problem beheben (vorausgesetzt der Benutzer: group ist mongodb:mongodb), obwohl es wahrscheinlich am besten ist, dies mit einem ls -al oder ähnlichem zu überprüfen, um sicher zu sein. Sobald dies geschehen ist, sollten Sie in der Lage sein, den Dienst erneut erfolgreich zu starten.

98
Adam Comerford

Stellen Sie zunächst sicher, dass der Benutzer/die Gruppe mongodb berechtigt ist, in das Verzeichnis data und die Datei log zu schreiben:

$ Sudo chown -R mongodb: mongodb/var/lib/mongodb /.

$ Sudo Chown -R Mongodb: Mongodb /var/log/mongodb.log

Starten Sie MongoDB als Daemon (Hintergrundprozess) mit dem folgenden Befehl:

$ mongod --fork --dbpath/var/lib/mongodb/--smallfiles --logpath /var/log/mongodb.log --logappend

Um Herunterfahren von MongoDB die Mongo-CLI einzugeben, auf den Administrator zuzugreifen und den Befehl zum Herunterfahren ausgeben:

$ ./mongo

> admin verwenden

> db.shutdownServer ()

Ref: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

34
nelsonic

Ich hatte auch das gleiche Problem. Also ging ich zu cd/var/lib/mongodb/und löschte die Datei mongod.lock.

9
Damodaran

Nachdem ich alle Erlaubnis in den Daten-, Journal- und Protokollordnern geprüft hatte, wie von @nelsonic vorgeschlagen, wurde mein Problem gelöst, indem die Erlaubnis erteilt wurde, die Datei im Ordner/tmp zu sperren

Sudo chown mongod:mongod mongodb-27017.sock  

Ich habe es als Amazon-Linux-Instanz von AWS ausgeführt. Ich fand das heraus, indem ich es als mongod-Benutzer wie unten ausgeführt ausführte und dann den Fehlercode untersuchte. Dies kann für andere Problemlösungen hilfreich sein.

Sudo -S -u mongod mongod -f /etc/mongod.conf
3
Pedro Israel

Nichts hat für mich funktioniert, dann habe ich festgestellt, dass es ein Berechtigungsproblem im /tmp-Verzeichnis gab: 

Sudo chmod 1777 /tmp
Sudo chown root:root /tmp
2
bekce

Mein mongodb wurde gestartet, als er von der Befehlszeile aus als mongod-Benutzer gestartet wurde, aber nicht als Dienst mit Benutzer = mongod .

In/etc/selinux/config habe ich von enforcing nach permissive gewechselt und neu gestartet. Es ist jetzt in Ordnung.

1

Keine der obigen Antworten funktionierte für mich. Ich fand es schließlich heraus, indem ich das Init-Skript mit folgendem debugging:

Sudo bash -x /etc/init.d/mongodb start

Und zu sehen, dass es den falschen Konfigurationspfad an Mongod weitergab. Ich habe einfach die Zeile in /etc/init.d/mongodb von "CONF =/etc/mongodb.conf" in "CONF =/etc/mongod.conf" geändert. Version 2 verwendet die vorherige Version. Bei der Installation von Version 3 wurde die Datei /etc/mongod.conf mit dem neuen Format hinzugefügt, das Init-Skript jedoch anscheinend nicht aktualisiert.

UPDATE: Ich habe jetzt ein viel unbekannteres Problem, bei dem das Init-Skript funktioniert, aber nur, wenn ich es mit "Sudo bash -x /etc/init.d/mongodb start" und nicht mit "Sudo service mongodb start" ausführen. Gleiches für Stop.

1
Abram

In diesen Tagen kann dieser Fehler auftreten, wenn Sie Mongod aktualisiert haben und eine alte Datenbank ausgeführt wird. Mongod verwendet standardmäßig die WiredTiger-Engine, und Sie verfügen über eine mmapv1-Datenbank

bearbeiten Sie die Engine-Einstellung in /etc/mongod.conf

# engine: wiredTiger
engine: mmapv1

Vorsicht - YAML reagiert auf Leerzeichen

journalctl/systemd sieht dieses Problem nicht. Überprüfen Sie das Mongod-Protokoll in /var/log/mongodb/mongod.log

Ich gehe davon aus, dass Sie die Datenbank mit den hier beschriebenen Schritten konvertieren können

https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/

0
Mark

Nachdem keine der obigen Antworten für mich funktioniert hat, löschte Mongo das Löschen meiner Log-Datei wieder.

0
Dave

überprüfen Sie auch Ihren Festplattenspeicher, da der Dienst die Protokolle nicht anhängen kann, wenn/var/log voll ist.

0
GPS

Versuchen Sie einfach diesen Befehl:

Sudo chown mongodb /tmp/mongodb-27017.sock
0
J.Jai