Je suis nouveau sur MongoDB. J'essaie d'installer MongoDb 3.0 sur Ubuntu 13.0 LTS, qui est un VM sur l'hôte Windows 7. J'ai installé MongoDB avec succès (paquets, etc.), mais lorsque j'exécute la commande Sudo service mongod start
, L'erreur suivante apparaît dans le fichier journal "/var/log/mongodb/mongod.log". Quelqu'un peut-il m'aider à comprendre cette erreur? Il n'y a rien sur Internet lié à cela.
2015-04-23T00: 12: 00.876-0400 I CONTROL ***** SERVER RESTARTED ***** 2015-04-23T00: 12: 00.931-0400 E Le réseau [initandlisten] n'a pas réussi à dissocier le socket fichier /tmp/mongodb-27017.sock errno: 1 Opération interdite 2015-04-23T00: 12: 00.931-0400 I - [initandlisten] Fatal Assertion 28578 2015-04-23T00: 12: 00.931-0400 I - [initandlisten]
J'ai résolu ce problème moi-même en supprimant le mongodb-27017.sock
fichier . J'ai exécuté le service après avoir supprimé ce fichier, qui a bien fonctionné. Cependant, je ne suis toujours pas sûr de la cause fondamentale du problème. Le résultat de la commande ls - lat /tmp/mongodb-27017.sock
est maintenant
srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock
Alternative à la réponse fournie par KurioZ7, vous pouvez simplement définir les autorisations du fichier .sock sur l'utilisateur actuel:
Sudo chown `whoami` /tmp/mongodb-27017.sock
Cela me convient si je veux exécuter Mongod sans Sudo. Si je supprime le fichier comme dans la réponse de KurioZ7, j'obtiendrai simplement la même erreur la prochaine fois que je redémarrerai ma machine.
Ce problème se produit lorsque vous utilisez la commande
mongod
Avant d'utiliser la commande
Sudo service mongod start
Pour résoudre le problème, soit:
Définissez les autorisations appropriées sur le fichier:
/tmp/mongodb-27017.sock
OR
Supprimer le fichier
/tmp/mongodb-27017.sock
Courir
Sudo service mongod start && mongod
La cause la plus probable en est que le processus mongod a été démarré à un moment donné par l'utilisateur root. Le fichier de socket (/tmp/mongodb-27017.sock) appartenait donc à l'utilisateur root. Le processus mongod s'exécute généralement sous son propre utilisateur dédié, et cet utilisateur ne disposait pas des autorisations nécessaires pour supprimer ce fichier.
Comme vous l'avez déjà découvert, la solution consistait à le supprimer. Ensuite, mongodb a été en mesure de le recréer avec les autorisations appropriées. Cela devrait persister après le redémarrage, tant que mongodb est démarré à l'aide des scripts d'initialisation ou sous le compte d'utilisateur approprié.
$ Sudo mongod
ça résout le problème pour moi
Pour les systèmes d’exploitation UNIX, vous pouvez également spécifier le fichier .sock à enregistrer dans un dossier sur lequel mongod dispose de tous les droits (correspondant à la façon dont vous exécutez mongod), au lieu de la réponse fournie par Bastronaut manière mongod sera également capable de supprimer le fichier .sock lors de l’arrêt. Le dossier par défaut dans lequel le fichier .sock est enregistré est '/ tmp'. Pour spécifier un autre dossier, utilisez un fichier de configuration personnalisé mongodb, par exemple 'mongodb.conf', et ajoutez-y les éléments suivants:
net:
unixDomainSocket:
pathPrefix: "anotherFolder"
Après quoi, vous pouvez exécuter mongod avec la commande:
$ mongod --config /path/to/mongodb.conf
Vous pouvez lire la documentation sur: https://docs.mongodb.org/manual/reference/configuration-options/#net.unixDomainSocket.pathPrefix