rc_status 始终返回“失败”

rc_status 始终返回“失败”

我们的一位开发人员有一项需要在启动时启动的服务。该脚本需要被触发:

/app/bt/preview/apache-tomcat-5.5.27/bin/startup.sh

这是我正在使用的启动脚本,名为/etc/init.d/bt:

#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          BTServer
# Required-Start:    $local_fs $network $remote_fs
# Required-Stop:     $local_fs $network $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: BT Server
# Description:       BT Server
### END INIT INFO
#
#
# Run BT startup scripts as btu user
#
# Location of startup script
BT_SCR='/app/bt/preview/apache-tomcat-5.5.27/bin/startup.sh'

test -x $BT_SCR || exit 5

# Set up rc_status command
. /etc/rc.status
rc_reset

case "$1" in
start)
        echo -n "Starting BT Server"
        startproc -u btu $BT_SCR
        rc_status -v
        ;;
        *)
        echo "Usage: $0 { start }"
        exit 1

        ;;
esac
exit 0

当我跑步时/etc/init.d/bt 启动从命令行,即使脚本正常启动,rc_status 每次都会失败。我不太明白rc_status是如何确定的;设置 rc_status 值是我的责任吗?

我知道我需要向 /etc/rc.d/rc3.d 添加一个符号链接,但现在我正尝试以 root 身份从命令行让它工作。

答案1

您不应该用于startproc启动 shell 包装脚本:startproc 旨在直接启动守护进程。它检查进程是否已启动并正在运行,并相应地设置其返回代码。

在您的情况下,startup.shTomcat 启动后不会运行 - 将会有一个带有参数包的 java 进程。因此,由于“startup.sh”不再运行,startproc 将返回“失败”。

答案2

我发现在 StackOverflow 上。他们在那里说

rc_status...设置“状态值”,这是 rc_exit 返回的返回值(放置在 init.d 脚本的末尾)

答案3

你可以看看我是如何在 devops-incubator 的 RPM 包中处理它的:

https://github.com/hgomez/devops-incubator/blob/master/rpm-packaging/myjenkins/SOURCES/initd.skel

相关内容