私は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をログファイルの名前に置き換えてください。