Mongo重启错误 - /var/run/mongodb/mongod.pid存在

skm*_*eld 15 mongodb amazon-web-services

我刚刚开始使用新的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:
Run Code Online (Sandbox Code Playgroud)

我是第一次使用服务运行Mongodb,

sudo service mongod start
Run Code Online (Sandbox Code Playgroud)

一切正常.当我停止Mongodb并重启时,

sudo service mongod stop
sudo service mongod restart
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,

Error starting mongod. /var/run/mongodb/mongod.pid exists.
Run Code Online (Sandbox Code Playgroud)

这是日志文件/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
Run Code Online (Sandbox Code Playgroud)

我已经看到几个博客发布了关于这个问题的解决方案,但似乎都没有.星期天整天花了一大笔钱试图找出这个.在运行早期的AWS实例和Mongo之前从未遇到此问题.

skm*_*eld 14

好的,发现了问题.我删除了上面Dave Maples建议的/var/run/mongodb/mongod.pid文件.但是,MongoDB仍然无法运行.我再次查看日志文件,现在看到它对这个文件咆哮,

/tmp/mongodb-27017.sock
Run Code Online (Sandbox Code Playgroud)

看起来它没有正确的权限.我试过了,

sudo chown mongod:mongod /tmp/mongodb-27017.sock
Run Code Online (Sandbox Code Playgroud)

它工作得很好.现在,当我多次启动/停止/重启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
Run Code Online (Sandbox Code Playgroud)

我敢打赌,如果我在新服务器上安装MongoDB后立即尝试"sudo chown mongod:mongod /tmp/mongodb-27017.sock",那么在运行MongoDB之前就可以避免这个问题了.在这一天浪费了一个完美的佛罗里达阳光灿烂的日子.

  • 相同的设置和问题,但对我来说仍然无法启动。我还必须`rm /var/lib/mongo/mongod.lock` 然后它仍然认为默认地址已经在使用中。必须确保`/var/run/mongodb/mongod.pid`再次消失,`mongod.lock`再次消失,然后`mkdir /data/db`和`chown -R mongod:mongod /data`在它之前终于开始,停止,然后重新开始。祝你好运。 (2认同)
  • 我回去看了看我的安装说明.这些天我在我的服务器上安装的所有内容都会保留安装说明.消除了很多重新发现的问题.我仔细看了看它们,注意到我做了以下注释"为了确保Mongo在重新启动后重新启动,请输入以下命令:sudo chkconfig mongod on".我相信这是根本问题.首次启动mongo后,您需要执行chkconfig命令. (2认同)

skm*_*eld 6

好的,找到了我在第一个答案中更好的解决方案.我之前的回答只是消除了症状.我看到其他几个人不得不打开各种其他目录.我认为问题是mongod没有正确重启并且因为失败而错误地设置了许多目录.我怀疑多个线程正在运行,因此错误设置的目录有点随机.我正在使用亚马逊的AWS AMI Linux版本并安装MongoDB 3.4.我找到了一个非常好的MongoDB安装脚本

 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/
Run Code Online (Sandbox Code Playgroud)

所以这是修复.我测试了几次,每次都有效.像往常一样安装mongo.如果有帮助,请使用上述脚本.在启动mongod之前,执行以下命令,

sudo chkconfig mongod on
Run Code Online (Sandbox Code Playgroud)

您将注意到上面的安装脚本突出显示了chkconfig,但是在脚本底部可能看不到它.这将确保您每次都可以成功重启mongod.这应该适用于其他Linux版本.

  • `sudo chkconfig mongod on`正常工作-谢谢!之后,使用`sudo mongod -f /etc/mongod.conf`启动服务。 (2认同)