我最近在我们的Red Hat企业Linux服务器上安装了mongo 2.6.5版本。一切都运行正常,直到我决定在/etc/mongod.conf文件中进行更改。我注意到从上面的2.6版开始,mongo支持YAML fomat中的conf文件。 (我想进行更改的原因是,我想在mongo实例上启用身份验证)
http://docs.mongodb.org/manual/reference/configuration-options/
我更改了我的配置文件,过去看起来如下(我只添加了部分配置):
# mongod.conf
#where to log
logpath=/var/log/mongodb/mongod.log
logappend=true
# fork and run in background
fork=true
#port=27017
dbpath=/var/lib/mongo
# location of pidfile
pidfilepath=/var/run/mongodb/mongod.pid
我的更改文件mongod.conf文件现在如下所示:
systemLog:
destination: file
path: "/var/log/mongodb/mongodb.log"
logAppend: true
storage:
dbPath: "/var/lib/mongo"
journal:
enabled: true
processManagement:
pidFilePath: "/var/run/mongodb/mongod.pid"
fork: true
security:
authorization: true![enter image description here][1]
现在,当我尝试运行mongod服务时,它给了我错误(参见附图): dirname:缺少操作数 试试&dirname --help'欲获得更多信息 启动mongod:[FAILED]
当我将mongod.conf文件还原到以前的版本时,该服务运行正常。我是否需要在mongo安装中更改某些内容以使其使用YAML格式的配置?
答案 0 :(得分:4)
一些事情:
确保在/etc/mongod.conf
中定义PID文件位置pidfilepath=/var/run/mongodb/mongod.pid
更改/etc/init.d/mongod中的“守护程序”行以显式使用PID文件
daemon --user "$MONGO_USER" --check "$mongod" --pidfile "$PIDFILE" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
此外,请确保以下所有内容均由mongod
拥有答案 1 :(得分:3)
虽然mongod支持YAML配置文件,但似乎还没有对其进行修改以处理它们。
答案 2 :(得分:2)
我一直在使用Centos 6.6上的mongo 2.6.5跟踪同样的问题。当它试图找到程序的基本名称然后自动生成PID文件时,错误来自/etc/init.d/functions
。 daemon
正在调用它:
daemon --user mongod ' /usr/bin/mongod -f /etc/mongod.conf >/dev/null 2>&1'
基本变量在最后一个斜杠后抓取所有内容,pidfile默认为base +" .pid"。通常你可以执行这样的事情:
daemon --user nobody /usr/bin/some-service
# base: some-service
# pid file: some-service.pid
对于mongo,基本变量设置为" null 2>& 1"然后运行basename null 2>&1
会导致您看到的错误。解决此问题的最简单方法是使用--check
daemon
命令行参数指定要运行的实际二进制文件。修改/etc/init.d/mongod
并搜索第111行:
# Old version
#daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
# New, working version
daemon --user "$MONGO_USER" --check "$mongod" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
如果不进一步深入研究这个问题,由于疏忽,这个论点似乎缺失了。
答案 3 :(得分:2)
这个错误有一个Jira问题,here。
他们有一个很好的解决方法,即更改用于在配置文件中查找值的REGEX。