我试图弄清楚为什么提供的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进程。
任何想法???
答案 0 :(得分:1)
以下链接似乎可以很好地解决问题 https://ma.ttias.be/mongodb-startup-dirname-extra-operand-pid/
简而言之,一个坏脚本似乎已经分发,但它产生的输出无害,mongod仍在运行。如果您运行yum update,您将获得一个固定的脚本,但很可能mongod仍然会失败,因为脚本没有使它失败。检查您的mongo日志(通常是/var/log/mongodb/mongod.log,但如果在/etc/mongod.conf中以不同方式指定,则可以不同)。日志文件应告诉您它失败的真正原因。
答案 1 :(得分:0)
检查配置文件/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'。如果它不存在,请添加它。
如果您使用的是/etc/mongod.conf的YAML版本,请查看此问题: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 ' '`
答案 2 :(得分:0)
对我来说问题出在pidfilepath中。 Init脚本无法像这样处理格式的路径
pidfilepath = /var/run/mongodb/mongod.pid
init脚本中的FIX: 用这个替换PIDFILE行,它将起作用。
PIDFILE = awk -F= '/^pidfilepath[[:blank:]]*=[[:blank:]]*/{gsub(" ", "", $2);print $2}' "$CONFIGFILE"
答案 3 :(得分:0)
我也面临同样的问题。
修复方法是对脚本文件(/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"
希望这有帮助!!!
答案 4 :(得分:-1)
它可能是initscript包中的RedHat错误: goog.le forum redhat bugzilla