1

私は Linux と OpenXCAP の初心者であり、CentOS 6 で OpenXCAP 用の init.d スクリプトを作成しようとしています。

私のスクリプトはOpenXCAP サービスを開始および停止できますが、ステータスコマンド (サービス openxcap ステータス)に対して次のエラーを返します: openxcap dead but subsys locked

問題が init.d スクリプトにあるのか、それとも openxcap サービス自体にあるのか、誰かが教えてくれるでしょうか? openxcap には「give-status」機能がありませんか?

#!/bin/bash
#
# Startup script for OpenXCAP
#
# processname: openxcap
# pidfile: /var/run/openxcap/openxcap.pid
# chkconfig: - 85 15
# description: start, stop, restart OpenXCAP server
#
### BEGIN INIT INFO
# Provides: openxcap
# Required-Start: $local_fs $network
# Should-Start: mysqld
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

APP_NAME=openxcap
APP_HOME=/usr/local/src/openxcap-2.0.1
PID_PATH=/var/run/openxcap/openxcap.pid
RETVAL=0

[ -f /etc/sysconfig/$APP_NAME ] && . /etc/sysconfig/$APP_NAME

start()
{
        echo -n $"Starting $APP_NAME: "
        daemon $APP_HOME/$APP_NAME $OPTIONS 2>/dev/null | tail -1
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/$APP_NAME
}

stop()
{
        echo -n $"Stopping $APP_NAME: "
        killproc -p $PID_PATH
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$APP_NAME $PID_PATH
}

# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        status)
                status $APP_NAME
                RETVAL=$?
                ;;
        restart|reload)
                stop
                start
                ;;
        *)
                echo $"Usage: $APP_NAME {start|stop|reload|restart|status|help}"
                exit 1
esac

exit $RETVAL
4

1 に答える 1

0

あなたは(うまくいけば)PIDファイルを/var/run/openxcap/openxcap.pid.

あなたのプログラムは 1 つの PID を書き出していますが、別のプロセスを開始していると思われます。最初のプロセスが死ぬのでsysvinit、別のプロセスを探すことを知りません。

ただし、プロセスが開始されたことを示すロック ファイルはまだ存在しています。

daemonこのプログラムを起動する関数を直接使用できない場合があります。正しい PID を識別するために「十分にスマート」なカスタマイズされたバージョンを作成する必要がある場合があります。

于 2012-01-25T18:21:23.820 に答える