我刚刚开始使用新的AWS Linux AMI 2016.09.1(HVM)并下载了最新的Mongodb版本.我使用的是MongoDB 3.0.14版.我将/etc/mongod.conf更新为以下内容,
# 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:
我是第一次使用服务运行Mongodb,
sudo service mongod start
一切正常.当我停止Mongodb并重启时,
sudo service mongod stop sudo service mongod restart
我收到以下错误,
Error starting mongod. /var/run/mongodb/mongod.pid exists.
这是日志文件/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
我已经看到几个博客发布了关于这个问题的解决方案,但似乎都没有.星期天整天花了一大笔钱试图找出这个.在运行早期的AWS实例和Mongo之前从未遇到此问题.
好的,发现了问题.我删除了上面Dave Maples建议的/var/run/mongodb/mongod.pid文件.但是,MongoDB仍然无法运行.我再次查看日志文件,现在看到它对这个文件咆哮,
/tmp/mongodb-27017.sock
看起来它没有正确的权限.我试过了,
sudo chown mongod:mongod /tmp/mongodb-27017.sock
它工作得很好.现在,当我多次启动/停止/重启MongoDB时,我不再有问题.我认为文件权限导致MongoDB无法正常清理自己,并在目录中留下/var/run/mongodb/mongod.pid文件.这导致"启动mongod错误./var/run/mongodb/mongod.pid exists"错误.但是,这不是真正的问题.真正的问题是/ tmp/permissions.删除mongod.pid文件并重新启动Mongod后查看日志文件显示权限问题.所以这是解决问题的方法,
sudo rm /var/run/mongodb/mongod.pid sudo chown mongod:mongod /tmp/mongodb-27017.sock
我敢打赌,如果我在新服务器上安装MongoDB后立即尝试"sudo chown mongod:mongod /tmp/mongodb-27017.sock",那么在运行MongoDB之前就可以避免这个问题了.在这一天浪费了一个完美的佛罗里达阳光灿烂的日子.
好的,找到了我在第一个答案中更好的解决方案.我之前的回答只是消除了症状.我看到其他几个人不得不打开各种其他目录.我认为问题是mongod没有正确重启并且因为失败而错误地设置了许多目录.我怀疑多个线程正在运行,因此错误设置的目录有点随机.我正在使用亚马逊的AWS AMI Linux版本并安装MongoDB 3.4.我找到了一个非常好的MongoDB安装脚本
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/
所以这是修复.我测试了几次,每次都有效.像往常一样安装mongo.如果有帮助,请使用上述脚本.在启动mongod之前,执行以下命令,
sudo chkconfig mongod on
您将注意到上面的安装脚本突出显示了chkconfig,但是在脚本底部可能看不到它.这将确保您每次都可以成功重启mongod.这应该适用于其他Linux版本.