Init 脚本初始化守护进程,但不会返回

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 替换为日志文件的名称。

相关内容