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。 startprocはデーモンプロセスを直接起動するためのものです。プロセスが実行中であることを確認し、それに応じて戻りコードを設定します。

あなたの場合、startup.shTomcatは起動後に実行されません。パラメータパックを含むJavaプロセスがあります。したがって、startup.sh は実行されなくなり、startproc は「Failed」を返します。

答え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

関連情報