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 上运行的主要内容,如果未能解决你的问题,请参考以下文章