启动mongod服务时出现“dirname:missing operand”错误

时间:2014-10-27 18:44:15

标签: mongodb

我最近在我们的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格式的配置?

4 个答案:

答案 0 :(得分:4)

一些事情:

  1. 确保在/etc/mongod.conf

    中定义PID文件位置
    pidfilepath=/var/run/mongodb/mongod.pid
    
  2. 更改/etc/init.d/mongod中的“守护程序”行以显式使用PID文件

    daemon --user "$MONGO_USER" --check "$mongod" --pidfile "$PIDFILE" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"
    
  3. 此外,请确保以下所有内容均由mongod

    拥有
    • 的/ var /日志/ mongodb的
    • 的/ var /运行/ mongodb的
    • 你的dbpath

答案 1 :(得分:3)

虽然mongod支持YAML配置文件,但似乎还没有对其进行修改以处理它们。

答案 2 :(得分:2)

我一直在使用Centos 6.6上的mongo 2.6.5跟踪同样的问题。当它试图找到程序的基本名称然后自动生成PID文件时,错误来自/etc/init.d/functionsdaemon正在调用它:

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。