Mongo mongod init.d 脚本无法在 CentOS 上运行

Posted

技术标签:

【中文标题】Mongo mongod init.d 脚本无法在 CentOS 上运行【英文标题】:Mongo mongod init.d script not working on CentOS 【发布时间】:2015-01-02 02:31:17 【问题描述】:

我试图弄清楚为什么提供的 init.d 脚本不能在 CentOS 上运行。我尝试手动启动它:

/etc/init.d/mongod start

但我收到以下错误:

Starting mongod: /usr/bin/dirname: extra operand `2>&1.pid'
Try `/usr/bin/dirname --help' for more information.

我查看了它尝试启动的脚本:

  daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"

所以我查看了 mongod var 的定义位置:

mongod=$MONGOD-/usr/bin/mongod

也试过了:

service mongod start

同样的错误。

不确定我的设置有什么问题,但我已经确认我有最新的脚本,但我无法启动 mongod 进程。

有什么想法吗???

【问题讨论】:

我在 Red Hat Linux 和 MongoDB 2.6.5 上看到了类似的行为 - 但 MongoDB 确实 会启动而不管此错误。 @Tommi: 对于 CentOS7 你可能想看看jira.mongodb.org/browse/SERVER-14679?filter=-2 @lostintranslation: 你用的是哪个版本的centos? 我也有这个问题。 centos 6.6 和 mongodb 2.6.5 【参考方案1】:

以下链接似乎很好地解决了这个问题 https://ma.ttias.be/mongodb-startup-dirname-extra-operand-pid/

简而言之,一个错误的脚本似乎已经分发,但它产生的输出并没有害处,mongod 仍然运行。如果你运行 yum update 你会得到一个固定的脚本,但很可能 mongod 仍然会失败,因为脚本没有让它失败。检查您的 mongo 日志(通常是 /var/log/mongodb/mongod.log,但如果在 /etc/mongod.conf 中以不同方式指定,则可能会有所不同)。日志文件应该告诉你失败的真正原因。

【讨论】:

我的 mongod 进程没有启动。我会升级看看是否能解决问题【参考方案2】:

查看配置文件/etc/mongod.conf中的mongo pid文件位置:

awk -F'[:=]' -v IGNORECASE=1 '/^[[:blank:]]*pidfilepath[[:blank:]]*[:=][[:blank:]]*/print $2' /etc/mongod.conf

默认情况下,mongod.conf 中应该有这一行:'pidfilepath = /var/run/mongodb/mongod.pid'。如果它不存在,则添加它。

如果您使用的是 YAML 版本的 /etc/mongod.conf,请查看此问题:https://jira.mongodb.org/browse/SERVER-13595。总之,你需要在/etc/rc.d/init.d/mongod中更改这一行:

PIDFILE=`awk -F= '/^pidfilepath[[:blank:]]*=[[:blank:]]*/print $2' "$CONFIGFILE"`

到:

PIDFILE=`awk -F: '/^[[:blank:]]*pidFilePath[[:blank:]]*:[[:blank:]]*/print $2' "$CONFIGFILE" | tr -d ' '`

【讨论】:

酷,谢谢,我会试试的。快速说明我也可以使用我的配置文件手动启动 mongod。 mongod -f /etc/mongod.conf。看起来不像是 conf 文件问题,更像是 init.d 脚本问题。启动 mongod: /usr/bin/dirname 错误也很麻烦,应该尝试启动 /usr/bin/mongod,/usr/bin/dirname 似乎是脚本变量搞砸了。【参考方案3】:

对我来说,问题出在 pidfilepath 中。初始化脚本无法处理这种格式的路径

pidfilepath = /var/run/mongodb/mongod.pid

init 脚本中的 PIDFILE 变量包含 '/var/run/mongodb/mongod.pid' 而不是 '/var/run/mongodb/mongod.pid'

修复: 用这个替换 PIDFILE 行,它会起作用。

PIDFILE=awk -F= '/^pidfilepath[[:blank:]]*=[[:blank:]]*/gsub(" ", "", $2);print $2' "$CONFIGFILE"

【讨论】:

另一种解决方案可能是github.com/mongodb/mongo/commit/…【参考方案4】:

我也遇到了同样的问题。

修复方法是在脚本文件(/etc/init.d/mongod) 中做一些小改动,如下所述:

line 63我猜:

daemon --user "$MONGO_USER" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"

daemon --user "$MONGO_USER" --pidfile "$PIDFILE" "$NUMACTL $mongod $OPTIONS >/dev/null 2>&1"

希望对你有帮助!!!

【讨论】:

【参考方案5】:

这可能是 initscript 包中的 RedHat 错误: goog.le forum redhat bugzilla

【讨论】:

以上是关于Mongo mongod init.d 脚本无法在 CentOS 上运行的主要内容,如果未能解决你的问题,请参考以下文章

mongo数据备份及恢复脚本

mongodb启动脚本

mongo和mongod的区别

MongoDB由于目标计算机积极拒绝,无法连接

Erlang:守护进程“init.d”脚本无法启动

MongoDB mongod.exe或mongo.exe双击一闪就关闭