【问题标题】:PHP-PFM is running after /etc/init.d/php5-fpm stopPHP-FPM 在 /etc/init.d/php5-fpm stop 之后运行
【发布时间】:2011-04-28 07:44:05
【问题描述】:

我真的不明白为什么 PFM 守护程序在我停止后仍在运行。

这是ps辅助:

root       998  0.1  0.1 127268  4316 ?        Ss   02:13   0:36 /usr/sbin/php5-fpm --fpm-config /etc/php5/fpm/main.conf
1004       999  0.0  0.1 127812  4628 ?        S    02:13   0:00 /usr/sbin/php5-fpm --fpm-config /etc/php5/fpm/main.conf

这是 /etc/init.d/php5-fpm 文件

#!/bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm php5-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: starts php-fpm
### END INIT INFO

set -u

DAEMON="PHP5 FPM"
FPM_CMD=/usr/sbin/php5-fpm
FPM_CONF=/etc/php5/fpm/main.conf
FPM_PID=/var/run/php5-fpm.pid
TIMEOUT=30

FPM_OPTIONS="--fpm-config $FPM_CONF"
SSD_OPTIONS="--oknodo --quiet --pidfile $FPM_PID --exec $FPM_CMD"

. /lib/lsb/init-functions

case "$1" in
    start)
        log_begin_msg "Starting $DAEMON..."

        /sbin/start-stop-daemon --start $SSD_OPTIONS -- $FPM_OPTIONS
        log_end_msg $?
    ;;
    stop)
        log_begin_msg "Stopping $DAEMON..."

        /sbin/start-stop-daemon --stop $SSD_OPTIONS
        log_end_msg $?
    ;;
    graceful-stop)
        log_begin_msg "Gracefully stopping $DAEMON..."

        /sbin/start-stop-daemon --stop --retry QUIT/$TIMEOUT/TERM $SSD_OPTIONS
        log_end_msg $?
    ;;
    restart)
        $0 stop
        $0 start
    ;;
    reload|force-reload)
        log_begin_msg "Reloading $DAEMON..."

        /sbin/start-stop-daemon --stop --signal USR2 $SSD_OPTIONS
        log_end_msg $?
    ;;
    *)
        echo "Usage: $0 {start|stop|graceful-stop|restart|reload|force-reload}"
        exit 1
    ;;
esac

我能做什么?

谢谢!

【问题讨论】:

  • 确定一下,您是否以 root 身份运行 /etc/init.d/php-fpm stop?
  • 我也停止了 lighttpd,但什么都没有……仍在运行。我不明白为什么我必须自己杀死进程:(嗯

标签: php


【解决方案1】:

我知道这篇文章现在有点老了,但仍然有解决办法

您可以通过设置 daemonize=yes 在 php-fpm.conf 中

在配置文件的 [global] 块中,您可以通过添加以下行来添加或设置守护进程的 pid 文件: pid = /var/run/php-fpm.pid

然后只需让 start-stop-daemon 不为 php-fpm 进程设置 pid,而是使用 teh daemon 本身提供的 pid

php-fpm 的 init.d 脚本将如下所示:

#!/bin/sh
NAME="php-fpm"
DESC="${NAME} deamon script"
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
DAEMON="/usr/local/sbin/php-fpm"
DAEMON_OPTS="--fpm-config=/path/to/php-fpm.conf -c=/path/to/php.ini"
#set this file to the same file as in your php-fpm.conf
PIDFILE="/var/run/${NAME}.pid"
QUIET="--quiet"
START_OPTS="--start ${QUIET} --background --exec ${DAEMON} -- ${DAEMON_OPTS}"
STOP_OPTS="--stop --pidfile ${PIDFILE}"

test -x $DAEMON || exit 0

set -e

case "$1" in
        start)
                echo -n "Starting $DESC: "
                export LD_LIBRARY_PATH="/usr/local/lib/"
                start-stop-daemon $START_OPTS
                echo "$NAME."
        ;;
        stop)
                echo -n "Stopping $DESC: "
                start-stop-daemon $STOP_OPTS
                echo "$NAME."
        ;;
        restart)
                echo -n "Restarting $DESC: "
                start-stop-daemon $STOP_OPTS
                sleep 1
                export LD_LIBRARY_PATH="/usr/local/lib/"
                start-stop-daemon $START_OPTS
                echo "$NAME."
        ;;
        *)
                N=/etc/init.d/$NAME
                echo "Usage: $N {start|stop|restart}" >&2
                exit 1
        ;;
esac

exit 0

【讨论】:

    【解决方案2】:

    我建议您使用killall -9 php-fpm 并查找 php-fpm 日志。例如,我想它会挂起处理带有set_time_limit(0) 和ignore_user_abort(true) 的长php脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 2016-02-24
      • 2012-11-14
      • 1970-01-01
      • 2017-04-07
      • 2012-11-02
      相关资源
      最近更新 更多