Initスクリプトはデーモンを初期化しますが、[ok]を返しません。

Initスクリプトはデーモンを初期化しますが、[ok]を返しません。

私はinitスクリプトに最初に触れましたが、私が使用しているスクリプトはほとんどそのままコピーされました(Fedoraで作業しているソースコードのいくつかを変更する必要がありました)。デーモンはfastcgiを見事に初期化しましたが、これは大きな勝利でした。しかし、プログラムが初期化されても、initスクリプト自体は決して実行を終了せず、決して[ok]を返しません。カーソルが点滅し、「PHP FastCGI実行中」で停止します。私もそれを取り除くことはできません。

初期化スクリプトは次のとおりです。これはFedora14サーバーです。

#!/bin/sh
#chkconfig 3 85 15
#processname: php-fcgi
 . /etc/rc.d/init.d/functions

php_cgi="/usr/bin/php-cgi"
prog=$(basename $php_cgi)
bind=/tmp/php.socket

php_fcgi_children=15
php_fcgi_max_requests=1000

user=root
php_cgi_args="- USER=$user PATH=/usr/bin PHP_FCGI_CHILDREN=$php_fcgi_children PHP_FCGI_MAX_REQUESTS=$php_fcgi_max_requests $php_cgi -b $bind"
RETVAL=0
start() {
    echo -n "Starting PHP FastCGI: "
    daemon /usr/bin/env $php_cgi_args
    RETVAL=$?
    echo "$prog."
}

stop() {
    echo -n "Stopping PHP FastCGI: "
    killall -q -w -u $user $php_cgi
    RETVAL=$?
    echo "$prog."
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    *)
    echo "Usage: php-fcgi {start|stop|restart}"
    exit 1
    ;;
esac
exit $RETVAL

答え1

php-fcgiプロセスは基本的にデーモン化されていないようです。つまり、観察したとおりフォアグラウンドにとどまり、進行を遮断するという意味です。デーモンとして実行することを意図したほとんどのアプリケーションには、デーモン化できるオプションがあります(つまり、バックグラウンドプロセスとして実行)。 php-fcgiプロセスにこれらのオプションがない場合は、バックグラウンドで明示的に実行し、デーモン行を次のように置き換える必要があります。

/usr/bin/env $php_cgi_args >/dev/null 2>&1 &

プロセスが見たいエラーや標準出力に直接ロギングを実行している場合は、上記の/dev/nullをログファイルの名前に置き換えてください。

関連情報