Bash rc.d启动不终止?
因此,我为Bash rc.d启动不终止?,bash,daemon,archlinux,Bash,Daemon,Archlinux,因此,我为mongod守护进程编写了Arch-Linux-rc.d脚本(如下),但当我这样做时: sudo rc.d start mongod 它只是被卡住了: :: Starting /usr/bin/mongod [BUSY] 永远不要过渡到“完成”阶段。有什么建议吗 这是我的剧本: #!/bin/bash # import predefined functions . /etc/rc.conf . /etc/rc.d/functions # Point to th
mongod
守护进程编写了Arch-Linux-rc.d脚本(如下),但当我这样做时:
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
;;
首先,您正在传递一个从未实际定义的$ARGS变量。您可能希望使用-f或--config选项传递一些或一个的位置,以通知守护进程您的数据库、日志文件、IP绑定等的位置 mongod默认值假定您的数据库位置为/data/db/。如果该位置不存在,或者守护进程没有访问该位置的权限,则初始化脚本将失败 您可能还应该使用您自己或root以外的用户帐户运行守护程序(默认的pacman包创建一个名为mongodb的用户),并授予该用户对数据路径和日志文件的读/写访问权限
[ -z "$PID" ] && /bin/su mongodb -c "/usr/bin/mongod --config /etc/mongodb.conf --fork" > /dev/null
我建议参考中提供的,并将其与这里的进行比较。或者,使用pacman安装MongoDB,这为您设置了所有这些
如果所有其他操作都失败,请在If和else块中添加一些“echo”命令,以准确跟踪init脚本挂起的位置,检查mongodb的日志,并向我们报告。首先,您传递的是一个从未实际定义的$ARGS变量。您可能希望使用-f或--config选项传递一些或一个的位置,以通知守护进程您的数据库、日志文件、IP绑定等的位置 mongod默认值假定您的数据库位置为/data/db/。如果该位置不存在,或者守护进程没有访问该位置的权限,则初始化脚本将失败 您可能还应该使用您自己或root以外的用户帐户运行守护程序(默认的pacman包创建一个名为mongodb的用户),并授予该用户对数据路径和日志文件的读/写访问权限
[ -z "$PID" ] && /bin/su mongodb -c "/usr/bin/mongod --config /etc/mongodb.conf --fork" > /dev/null
我建议参考中提供的,并将其与这里的进行比较。或者,使用pacman安装MongoDB,这为您设置了所有这些
如果所有其他操作都失败,请在If和else块中添加一些“echo”命令,以准确跟踪init脚本挂起的位置,检查mongodb的日志,并向我们报告。这行代码:
[-z“$PID”]&&&$DAEMON$ARGS&>/dev/null
是否实际返回(即mongod
本身是否正确)或者您需要在该行末尾添加一个&
?您可以将-x
添加到#/bin/bash
行来跟踪脚本进度并查看停止的位置…遗憾的是,它永远不会返回。。。我将尝试添加&
添加&
效果良好,但它仍会偶尔向终端输出输出(不过关闭终端窗口也可以)。干杯您不使用pacman安装的有什么特殊原因吗?您自己编译过MongoDB吗?这一行:[-z“$PID”]&&&$DAEMON$ARGS&>/dev/null
是否实际返回(即mongod
本身是否正确地作为背景),或者您是否需要在该行末尾添加&
?您可以将-x
添加到#/bin/bash
行来跟踪脚本进度并查看停止的位置…遗憾的是,它永远不会返回。。。我将尝试添加&
添加&
效果良好,但它仍会偶尔向终端输出输出(不过关闭终端窗口也可以)。干杯您不使用pacman安装的有什么特殊原因吗?你自己编译MongoDB了吗?没有看到arch包。或者也许它不起作用。无论如何,我会试着向你汇报。但是剧本看起来很棒,谢谢@drozzy作为将来的参考,您可以使用pacman-Ss[关键字]
搜索Arch存储库。这还会告诉您是否已经安装了软件包。除非您有特殊需要,否则不应该在Arch上手动编译/安装MongoDB;而且软件包一直都是最新的。没有看到arch软件包。或者也许它不起作用。无论如何,我会试着向你汇报。但是剧本看起来很棒,谢谢@drozzy作为将来的参考,您可以使用pacman-Ss[关键字]
搜索Arch存储库。这还会告诉您是否已经安装了软件包。除非您有特殊需要,否则不应该在Arch上手动编译/安装MongoDB;而且包裹始终保持最新。