web-dev-qa-db-fra.com

MongoDB sur Ubuntu ne démarre pas en tant que service, rien dans le journal

Suis MongoDB 2.2 sur Ubuntu et si je lance:

Sudo mongod

Je reçois un message d'erreur indiquant qu'il ne trouve pas/data/db, ce qui n'est pas l'emplacement de la base de données. Dans mongod.conf, le chemin de la base de données est spécifié comme étant le /var/lib/mongodb par défaut Ubuntu 10gen qui est l'emplacement de la base de données. On dirait que mongod ne trouve pas le fichier conf. Alors quand je cours:

Sudo mongod -f /etc/mongodb.conf

Le serveur démarre correctement et la sortie est consignée dans le fichier journal: /var/log/mongodb/mongodb.log. Tout est heureux. Je peux passer à un autre Shell, me connecter à mongo Shell, consulter les bases de données et exécuter des requêtes.

Donc, j'annule et essaie de fonctionner en tant que service:

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

Ça a l'air bien jusqu'à présent, mais le serveur Mongo n'a pas démarré. En exécuter un autre:

> 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" n'est pas la bonne base de données et rien ne s'affiche dans le fichier journal.

Je ne sais pas ce qui pourrait être faux. J'ai vérifié les scripts de démarrage et ils semblent bien. /etc/init/mongodb.conf exécute:

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

OK, tout se résume aux autorisations, mais passons-y étape par étape. Lorsque vous exécutez Sudo mongod, il ne charge pas du tout un fichier de configuration, il commence littéralement par les paramètres par défaut compilés - port 27017 , chemin de la base de données of/data/db, etc. - c’est pourquoi vous avez obtenu le erreur sur le fait de ne pas pouvoir trouver ce dossier. "Ubuntu default" n'est utilisé que lorsque vous le dirigez vers le fichier de configuration (si vous commencez à utiliser la commande de service, cela est fait pour vous dans les coulisses).

Ensuite, vous l'avez exécuté comme ceci:

Sudo mongod -f /etc/mongodb.conf

S'il n'y avait pas de problèmes auparavant, alors il y en aura maintenant - vous avez exécuté le processus, avec votre configuration normale (en indiquant votre chemin d'accès et votre journal habituels) en tant qu'utilisateur root. Cela signifie qu’il va maintenant y avoir un certain nombre de fichiers dans ce dossier MongoDB normal avec l’utilisateur: groupe de root:root

Cela provoquera des erreurs lorsque vous essayez de le redémarrer en tant que service normal, car l'utilisateur mongodb (sous lequel le service tentera de s'exécuter en tant que) n'aura pas la permission d'accéder à ces fichiers root:root, et plus particulièrement, il ne pourra probablement pas. écrire dans le fichier journal pour vous donner des informations. 

Par conséquent, pour l'exécuter en tant que service normal, nous devons corriger ces autorisations. Tout d’abord, assurez-vous que MongoDB n’est pas en cours d’exécution en tant que root, puis:

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

Cela devrait résoudre le problème (en supposant que l'utilisateur: le groupe est mongodb:mongodb), bien qu'il soit probablement préférable de vérifier avec un ls -al ou similaire pour en être sûr. Une fois que cela est fait, vous devriez pouvoir faire redémarrer le service avec succès.

98
Adam Comerford

Commencez par confirmer que l'utilisateur/le groupe mongodb est autorisé à écrire dans le répertoire data et le fichier log:

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

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

Démarrez MongoDB en tant que démon (processus en arrière-plan) à l'aide de la commande suivante:

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

Pour Arrêter MongoDB , entrez la CLI de Mongo, accédez à l'administrateur et lancez la commande d'arrêt:

$ ./mongo

> utiliser admin

> db.shutdownServer ()

Réf.: Http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo } _

34
nelsonic

Moi aussi j'ai eu le même problème. Alors je suis allé à cd/var/lib/mongodb/et j'ai supprimé le fichier mongod.lock.

9
Damodaran

Après avoir vérifié toutes les autorisations dans les dossiers de données, de journal et de journal, comme suggéré par @nelsonic, mon problème a été résolu en donnant l'autorisation de verrouiller le fichier dans le dossier/tmp.

Sudo chown mongod:mongod mongodb-27017.sock  

Je l'exécutais en tant qu'instance AWS Amazon Linux . Je l'ai compris en l'exécutant en tant qu'utilisateur de mongod comme indiqué ci-dessous, puis en recherchant le code d'erreur. Cela pourrait être utile pour d'autres problèmes.

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

Rien n'a fonctionné pour moi, alors j'ai trouvé qu'il s'agissait d'un problème d'autorisations sur le répertoire /tmp

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

Mon mongodb commençait lorsqu'il était lancé depuis la ligne de commande en tant qu'utilisateur mongod, mais pas en tant que service avec User = mongod . Après une heure de vérification des autorisations, de la définition du service, des sockets ... c'était SElinux!

Dans/etc/selinux/config, je suis passé de forcing à permissive et redémarrez. C'est ok maintenant.

1
Julien Laurenceau

Aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai finalement compris en déboguant le script init avec:

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

Et voir cela passait par le mauvais chemin de configuration pour Mongod. J'ai simplement changé la ligne dans /etc/init.d/mongodb de "CONF =/etc/mongodb.conf" à "CONF =/etc/mongod.conf". La version 2 utilise l'ancienne, et l'installation de la version 3 a ajouté /etc/mongod.conf avec le nouveau format mais n'a apparemment pas mis à jour le script init.

UPDATE: J'ai un problème beaucoup plus étrange où le script init fonctionne, mais uniquement si je l'exécute avec "Sudo bash -x /etc/init.d/mongodb start" et non avec "Sudo service mongodb start". Même chose pour arrêter.

1
Abram

Ces jours-ci, cette erreur peut se produire si vous avez mis à jour Mongod et que vous utilisez une ancienne base de données. Mongod utilisera le moteur wiredTiger par défaut et vous aurez une base de données mmapv1

éditez les paramètres du moteur dans /etc/mongod.conf

# engine: wiredTiger
engine: mmapv1

Attention - YAML est sensible aux espaces

journalctl/systemd ne verra pas ce problème. Vérifiez le journal mongod dans /var/log/mongodb/mongod.log

Je suppose que vous pouvez convertir la base de données avec quelque chose comme les étapes décrites ici

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

0
Mark

Aucune de ces réponses n'ayant fonctionné pour moi, la suppression de mon fichier journal a ramené Mongo à la vie.

0
Dave

vérifiez également votre espace disque dur, car si/var/log est plein, le service ne peut pas ajouter les journaux.

0
GPS

Essayez juste cette commande:

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