web-dev-qa-db-fra.com

Erreur de redémarrage Mongo - /var/run/mongodb/mongod.pid existe

Je viens de commencer une nouvelle AWS Linux AMI 2016.09.1 ​​(HVM) et j'ai téléchargé la dernière version de Mongodb. J'utilise MongoDB version 3.0.14. J'ai mis à jour le fichier /etc/mongod.conf comme suit,

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
#  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on
    all interfaces.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

Je lance Mongodb pour la première fois en utilisant le service,

Sudo service mongod start

Tout fonctionne bien. Quand j'arrête Mongodb et que je redémarre,

Sudo service mongod stop
Sudo service mongod restart

Je reçois l'erreur suivante,

Error starting mongod. /var/run/mongodb/mongod.pid exists.

Voici ce qui se trouve dans le fichier journal, /var/log/mongodb/mongod.log,

2017-01-16T14:11:16.869+0000 I CONTROL  ***** SERVER RESTARTED *****
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] MongoDB starting :
    pid=2820 port=27017 dbpath=/var/lib/mongo 64-bit hos
    t=ip-10-0-0-91
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] db version v3.0.14
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] git version:
    08352afcca24bfc145240a0fac9d28b978ab77f3
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] build info: Linux
    ip-10-63-190-181 3.4.43-43.43.amzn1.x86_64 #1 SMP Mon
    May 6 18:04:41 UTC 2013 x86_64 BOOST_LIB_VERSION=1_49
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-01-16T14:11:16.872+0000 I CONTROL  [initandlisten] options: { config:
    "/etc/mongod.conf", net: { port: 27017 }, processMan
    agement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid" },
    storage: { dbPath: "/var/lib/mongo", journal: { enabled: t
    rue } }, systemLog: { destination: "file", logAppend: true, path:   
    "/var/log/mongodb/mongod.log" } }
2017-01-16T14:11:16.893+0000 E NETWORK  [initandlisten] Failed to unlink
    socket file /tmp/mongodb-27017.sock errno:1 Operation
    not permitted
2017-01-16T14:11:16.893+0000 I -        [initandlisten] Fatal Assertion   
    28578
2017-01-16T14:11:16.893+0000 I -        [initandlisten]

***aborting after fassert() failure

J'ai vu plusieurs blogs postés sur ce problème avec des solutions, mais aucun d'entre eux ne semble fonctionner. J'ai passé toute la journée dimanche à essayer de comprendre celui-ci. Vous n’avez jamais rencontré ce problème avant d’exécuter une instance AWS antérieure et Mongo.

13
skmansfield

Ok, j'ai trouvé une meilleure solution à ce que j'avais dans ma première réponse. Ma réponse précédente a simplement éliminé les symptômes. J'ai vu que plusieurs autres personnes devaient chown divers autres répertoires. Je crois que le problème est que mongod ne redémarre pas correctement et laisse un certain nombre de répertoires mal configurés car ils échouent. Je soupçonne que plusieurs threads sont en cours d'exécution, donc le répertoire mal configuré est quelque peu aléatoire. J'utilise la version AWS AMI Linux d'Amazon et j'installe MongoDB 3.4. J'ai trouvé un très bon script d'installation MongoDB à l'adresse 

 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-Amazon/

Alors voici la solution. Je l'ai testé plusieurs fois et cela a fonctionné à chaque fois. Installez mongo comme vous le feriez normalement. Utilisez le script ci-dessus si utile. Avant de commencer Mongod, exécutez la commande suivante,

Sudo chkconfig mongod on

Vous remarquerez que le script d’installation ci-dessus met en évidence chkconfig mais qu’il se peut qu’il ne soit pas visible au bas du script. Cela garantira que vous pouvez redémarrer correctement Mongod à chaque fois. Cela devrait fonctionner sur d'autres versions de Linux.

5
skmansfield

Ok, trouvé le problème. J'ai supprimé le fichier /var/run/mongodb/mongod.pid comme suggéré par Dave Maples ci-dessus. Cependant, MongoDB ne fonctionnerait toujours pas. J'ai regardé à nouveau le fichier journal et je l'ai vu aboyer à propos de ce fichier,

/tmp/mongodb-27017.sock

Il semblait qu'il ne disposait pas des autorisations appropriées. J'ai essayé,

Sudo chown mongod:mongod /tmp/mongodb-27017.sock

Et cela a bien fonctionné. Maintenant, quand je démarre/arrête/redémarre MongoDB plusieurs fois, je n'ai plus le problème. Je pense que les autorisations de fichiers ont empêché MongoDB de se nettoyer correctement et ont laissé le fichier /var/run/mongodb/mongod.pid dans le répertoire. Cela a provoqué l'erreur "Erreur de démarrage de mongod. /Var/run/mongodb/mongod.pid existe". Cependant, ce n'était pas le vrai problème. Le vrai problème était le/tmp/permissions. L'examen du fichier journal après la suppression du fichier mongod.pid et le redémarrage de Mongod ont mis en évidence le problème des autorisations. Alors, voici ce qui a résolu le problème,

Sudo rm /var/run/mongodb/mongod.pid
Sudo chown mongod:mongod /tmp/mongodb-27017.sock

Je parie que si je venais d'essayer "Sudo chown mongod: mongod /tmp/mongodb-27017.sock" juste après avoir installé MongoDB sur le nouveau serveur avant d'exécuter MongoDB aurait évité le problème. Nous avons perdu une journée ensoleillée en Floride.

12
skmansfield

vous pouvez changer l'ip dans le fichier de configuration:

vim /etc/mongod.conf

#  bindIp: 127.0.0.1  # Listen to local interface only, comment to listen on
    all interfaces.
  bindIp: xxx.xxx.xxx.xxx
1
NOZUONOHIGH