所以我为mongod
守护程序编写了Arch Linux rc.d脚本(在an example之后),但是当我这样做时:
sudo rc.d start mongod
它只会被卡住:
:: Starting /usr/bin/mongod [BUSY]
并且永远不会过渡到“完成”阶段。有什么提示吗?
这是我的剧本:
#!/bin/bash
# import predefined functions
. /etc/rc.conf
. /etc/rc.d/functions
# Point to the binary
DAEMON=/usr/bin/mongod
# Get the ARGS from the conf
. /etc/conf.d/crond
# Function to get the process id
PID=$(get_pid $DAEMON)
case "$1" in
start)
stat_busy "Starting $DAEMON"
# Check the PID exists - and if it does (returns 0) - do no run
[ -z "$PID" ] && $DAEMON $ARGS &> /dev/null
if [ $? = 0 ]; then
add_daemon $DAEMON
stat_done
else
stat_fail
exit 1
fi
;;
stop)
stat_busy "Stopping $DAEMON"
kill -HUP $PID &>/dev/null
rm_daemon $DAEMON
stat_done
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "usage: $0 {start|stop|restart}"
esac
我已经看过apache是如何做到的,但我无法弄清楚他们在做什么,这是不同的。这是他们httpd
脚本的一部分:
case "$1" in
start)
stat_busy "Starting Apache Web Server"
[ ! -d /var/run/httpd ] && install -d /var/run/httpd
if $APACHECTL start >/dev/null ; then
add_daemon $daemon_name
stat_done
else
stat_fail
exit 1
fi
;;
答案 0 :(得分:1)
首先,您传递的$ ARGS变量从未实际定义过。您可能希望使用-f或--config选项传递一些configuration options或mongodb.conf file的位置,以通知守护程序您的数据库位置,日志文件,IP绑定等等。
mongod默认假设您的数据库位置是/ data / db /。如果这不存在,或者守护程序没有该位置的权限,则init脚本将失败。
您可能还应该使用除您自己或root之外的用户帐户运行守护程序(默认的pacman程序包创建名为mongodb的用户),并授予此用户对数据路径和日志文件的读/写访问权限。
[ -z "$PID" ] && /bin/su mongodb -c "/usr/bin/mongod --config /etc/mongodb.conf --fork" > /dev/null
我建议您参考mongodb init script中提供的Arch Community package,并将其与此处的内容进行比较。或者,使用pacman安装MongoDB,它会为您设置所有这些。
如果所有其他方法都失败了,请在中添加一些'echo'命令(如果和 else 块)以准确追踪init脚本挂起的位置,检查mongodb的日志,并向我们报告。