MongoDB sur Ubuntu ne démarre pas en tant que service, rien dans le journal
Je cours MongoDB 2.2 sur Ubuntu et si je cours:
sudo mongod
Je reçois une erreur qu'il ne peut pas trouver /data/db, qui n'est pas où se trouve la base de données. En mongod.conf le chemin de la base de données est spécifié comme le défaut Ubuntu 10gen /var/lib/mongodb
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 de sortie est enregistré dans le fichier journal: /var/log/mongodb/mongodb.log
. Tout est heureux. Je peux passer à un autre shell, connectez-vous à Mongo shell, voir le bases de données et exécuter des requêtes.
Donc, j'annule cela et essaie de fonctionner en tant que service:
> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468
Semble bon jusqu'à présent, mais le serveur mongo n'a pas démarré. 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 base de données correcte, et rien n'apparaît dans le fichier journal.
Je ne sais pas ce qui pourrait être mal. J'ai vérifié les scripts arrivistes et ils semblent bien. /etc/init/mongodb.conf
fonctionne:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
9 réponses
OK, tout cela se résume à des autorisations, mais prenons-le étape par étape. Lorsque vous exécutez sudo mongod
il ne charge pas du tout un fichier de configuration, il commence littéralement par le compilé dans defaults-port 27017, Chemin de base de données de / data / db etc. - c'est pourquoi vous avez l'erreur de ne pas être en mesure de trouver ce dossier. Le "Ubuntu default" n'est utilisé que lorsque vous le pointez sur le fichier de configuration (si vous commencez à utiliser la commande de service, cela se fait pour vous dans les coulisses).
Suivant vous avez couru comme ceci:
sudo mongod -f /etc/mongodb.conf
S'il n'y avait pas de problèmes avant, alors il y aura maintenant - vous avez exécuté le processus, avec votre configuration normale (pointant sur votre dbpath et votre journal habituels) en tant qu'utilisateur root. Cela signifie qu'il va maintenant être un certain nombre de fichiers dans ce normale MongoDB dossier 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 (que le service tentera d'Exécuter) ne le fera pas avoir la permission d'accéder à ces fichiers root:root
, et plus particulièrement, il ne sera probablement pas en mesure d'é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 le réparer (en supposant que l'utilisateur: groupe est mongodb:mongodb
), bien qu'il soit probablement préférable de vérifier avec un ls -al
ou similaire pour être sûr. Une fois cela fait vous devriez être en mesure d'obtenir le service pour démarrer avec succès à nouveau.
Vérifiez d'Abord que le mongodb utilisateur/groupe a l'autorisation d'écrire à la fois à l' données répertoire et log fichier:
$ 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 d'arrière-plan) en utilisant la commande suivante:
$ mongod --fourche --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.journal -- logappend
Pour arrêter MongoDB entrez le CLI Mongo, accédez à l'administrateur et exécutez la commande shutdown:
$ ./ mongo
> utiliser admin -
> db.shutdownServer ()
Ref: http://www.mongodb.org/display/DOCS/Starting+et+Arrêt+Mongo
Moi aussi j'ai eu le même problème. Je suis donc allé à cd /var/lib/mongodb/ et supprimé le mongod.verrouiller le fichier Puis il a travaillé pour moi.
Rien n'a fonctionné pour moi, alors j'ai trouvé que c'était un problème d'autorisations sur le répertoire /tmp
:
sudo chmod 1777 /tmp
sudo chown root:root /tmp
Après avoir vérifié toutes les autorisations dans les dossiers data, journal et log 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. J'ai compris cela en exécutant en tant qu'utilisateur mongod comme ci-dessous, puis en recherchant le code d'erreur. Cela pourrait être utile pour d'autres dépannages.
sudo -S -u mongod mongod -f /etc/mongod.conf
Aucune des réponses ci-dessus n'a fonctionné pour moi. J'ai finalement compris en déboguant le script d'initialisation avec:
Sudo bash-x / etc / init.d/mongodb démarrer
Et le voir passait le mauvais chemin de configuration à mongod. J'ai simplement changé la ligne dans /etc/init.d / mongodb à partir de " CONF= / etc / mongodb.conf " à " CONF = /etc / mongod.conf". Version 2 utilise l'ancien, et l'installation de la version 3 Ajouté/etc / mongod.conf avec le nouveau format mais apparemment n'a pas mis à jour le script d'initialisation.
MISE À JOUR: I maintenant bien étranger problème où le script fonctionne, mais seulement si je le lance avec "sudo bash -x /etc/init.d/mongodb démarrer" et pas avec "sudo service mongodb démarrer". Même chose pour stop.
Après qu'aucune des réponses ci-dessus n'ait fonctionné pour moi, la suppression de mon fichier journal a ramené Mongo à la vie.
Ces jours-ci, cette erreur peut se produire si vous avez mis à jour mongod et que vous exécutez une ancienne base de données. Mongod utilisera le moteur wiredTiger par défaut et vous aurez une base de données mmapv1
Modifiez 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 log 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/
Essayez simplement cette commande:
sudo chown mongodb /tmp/mongodb-27017.sock