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을 로그 파일 이름으로 바꾸세요.

관련 정보