web-dev-qa-db-fra.com

Erreur "dissociation du fichier de socket" dans MongoDB 3.0

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]

60
KurioZ7

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
128
KurioZ7

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.

26
Bastronaut

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
12
Greg Miller

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

9
SpooForBrains
$ Sudo mongod

ça résout le problème pour moi

4
CodeBy

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

2
Bafoo