【问题标题】:Can't start or stop php-fpm on Ubuntu无法在 Ubuntu 上启动或停止 php-fpm
【发布时间】:2014-05-05 03:05:45
【问题描述】:

我第一次尝试在 Ubunutu 上安装 php-fpm。我已经通过安装它

sudo apt-get install php5-fpm

安装完成后,我运行ps -waux | grep php5 以查看是否有任何运行。我得到以下信息:

root      9625  0.5  0.6 133612 12836 ?        Ss   22:49   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)

看起来它正在运行,所以我尝试通过执行来停止它:

sudo /etc/init.d/php5-fpm stop

这似乎什么也没做。命令行上没有给出错误消息,当我再次运行ps 时,存在相同的进程。如果我运行,我可以让它停止:

sudo service php5-fpm stop

第一次运行此命令时,我收到一个关于无法找到目录的错误,但进程确实停止了。当我再次启动和停止服务时,它似乎工作正常,并且我没有收到有关丢失目录的错误消息。

有人可以向我解释为什么 /etc/init.d/php5-fpm 方法不起作用吗?我见过的所有教程都使用这种方法来启动和停止php5-fpm。

【问题讨论】:

    标签: php


    【解决方案1】:

    快速回答...您不要使用 init.d 脚本来控制 php-fpm(停止/启动/状态等),因为它是由较新的“新贵”控制的。使用以下服务命令停止和重新启动等。我认为它安静地退出而没有说明它现在由新贵控制是一个“错误”。

    更详细地看这个问题,导致上面的解释。

    我在 Ubuntu 14.04 上看到完全相同的问题,您可以使用服务命令停止/启动/获取 php5-fpm 的状态:即这些工作正常:-

    # sudo service php5-fpm status
    php5-fpm start/running, process 18793
    # sudo service php5-fpm stop
    php5-fpm stop/waiting
    # sudo service php5-fpm status
    php5-fpm stop/waiting
    # sudo service php5-fpm start
    php5-fpm start/running, process 18949
    # sudo service php5-fpm status
    php5-fpm start/running, process 18949
    

    但是 /etc/init.d/php5-fpm 命令无效:-

    # /etc/init.d/php5-fpm stop
    # ps -ef | grep php
    root     18949     1  0 12:15 ?        00:00:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)                    
    www-data 18952 18949  0 12:15 ?        00:00:00 php-fpm: pool www                                                       
    www-data 18953 18949  0 12:15 ?        00:00:00 php-fpm: pool www                                                       
    root     18970 10051  0 12:17 pts/2    00:00:00 grep --color=auto php
    

    注意没有返回任何内容,并且该过程没有停止。同样,对于 status 和 start 版本,不会返回任何内容,并且该过程不受影响。

    我找到了它退出 init.d 脚本的那一行……init_is_upstart:

    # Don't run if we are running upstart
    if init_is_upstart; then
        exit 1
    fi
    

    当然它应该在此处声明一条错误消息...例如“使用服务命令停止/启动 php-fpm”。

    【讨论】:

    • 感谢您抽出宝贵时间提供出色的答案!这对我帮助很大。
    • 其实有个bug。您需要将 init.d/php5-fpm 移开,以允许新贵在 2014 年 10 月 24 日开始工作。 bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376
    • 任何想法为什么“sudo service php5-fpm reload”可以从shell工作,但不能在cron任务中(以root身份运行)?我正在尝试缓解间歇性中断。
    【解决方案2】:

    我在 Ubuntu 14.10 上遇到了与 php5-fpm 相关的类似问题。 我已经为其中一个虚拟主机配置了 php5-fpm,当尝试浏览该站点时,我得到了 503 Service Unavailable。 每次都试了

    root@testupgrade:~# service php5-fpm restart
    stop: Unknown instance:
    php5-fpm start/running, process 2775
    

    我在系统日志中得到了以下信息:

    Dec  7 14:08:53 testupgrade kernel: [  230.711612] init: php5-fpm main process (2775) terminated with status 78
    Dec  7 14:08:53 testupgrade kernel: [  230.711639] init: php5-fpm main process ended, respawning
    Dec  7 14:08:53 testupgrade kernel: [  230.866617] init: php5-fpm main process (2783) terminated with status 78
    Dec  7 14:08:53 testupgrade kernel: [  230.866643] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.027522] init: php5-fpm main process (2791) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.027548] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.137792] init: php5-fpm main process (2799) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.137807] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.221146] init: php5-fpm main process (2807) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.221161] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.301859] init: php5-fpm main process (2815) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.301874] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.381635] init: php5-fpm main process (2823) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.381649] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.469211] init: php5-fpm main process (2831) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.469225] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.548950] init: php5-fpm main process (2839) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.548964] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.628781] init: php5-fpm main process (2847) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.628795] init: php5-fpm main process ended, respawning
    Dec  7 14:08:54 testupgrade kernel: [  231.711933] init: php5-fpm main process (2855) terminated with status 78
    Dec  7 14:08:54 testupgrade kernel: [  231.711947] init: php5-fpm respawning too fast, stopped
    

    然后我尝试检查这个虚拟主机池的 php5-fpm 配置是否真的有效。 它被配置为在 /etc/php5/fpm/pool.d/www.conf 中具有以下配置的 TCP 端口上列出 我已正确指示池列出如下:

    listen = 127.0.0.1:9000
    

    我尝试使用 service 命令重新启动几次,但由于它不起作用,我决定检查启动脚本。 我编辑了 /etc/init/php5-fpm.conf,我注意到我已经有了最新的错误修复版本的“重新加载信号 USR2”行。 然后我注意到以下行:

    pre-start exec /usr/lib/php5/php5-fpm-checkconf
    

    我检查了 /usr/lib/php5/php5-fpm-checkconf 脚本并注意到附加到 $errors 变量的语法检查:

    /usr/sbin/php5-fpm --fpm-config /etc/php5/fpm/php-fpm.conf
    

    我在 shell 中执行它并注意到以下内容:

    root@testupgrade:~# /usr/sbin/php5-fpm --fpm-config /etc/php5/fpm/php-fpm.conf
    [07-Dec-2014 13:46:14] ERROR: [pool www] 'slowlog' must be specified for use with 'request_slowlog_timeout'
    [07-Dec-2014 13:46:14] ERROR: failed to post process the configuration
    [07-Dec-2014 13:46:14] ERROR: FPM initialization failed
    

    这意味着我已经触摸了我的 php-fpm.conf 并将其搞砸了,但是找不到错误,并且我没有迹象表明这是 php5-fpm 服务无法启动的原因。 我修复了 /etc/php5/fpm/pool.d/www.conf 文件中的语法,然后尝试使用 service 命令再次重新启动。 该服务启动并在所需端口 9000 上打开了一个 tcp 侦听器。 虚拟主机也开始工作。 因此,请务必使用上述命令检查 php-fpm 语法和配置,以避免出现服务无法启动的问题。

    【讨论】:

    【解决方案3】:

    通常,init 脚本不会总是找出导致这种情况发生的问题。您最好的选择是cat /etc/init.d/php5-fpm 并找到它尝试运行的命令,然后使用该命令手动启动该进程。

    根据 FPM 启动脚本的经验,FPM 通常会从随机日志文件中找出您看不到或丢失的错误,然后您就可以找到并修复该错误。解决后,您的初始化脚本应该可以继续使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      相关资源
      最近更新 更多