Не удается запустить или остановить php-fpm на Ubuntu

Я пытаюсь установить php-fpm в первый раз на Ubunutu. Я установил его через

sudo apt-get install php5-fpm

Когда установка завершается, я запускаю ps -waux | grep php5 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.

Ответ 1

Быстрый ответ... вы не используете скрипты init.d для управления (stop/start/status и т.д.) Php-fpm, потому что он управляется более новым "выскочкой". Используйте следующую служебную команду, чтобы остановить и перезапустить и т.д. Я думаю, что это немного "ошибка", что он спокойно выходит, не заявляя, что теперь он контролируется выскочкой.

Более подробно рассмотрим эту проблему, которая приводит к объяснению выше.

Я вижу точно такую же проблему на Ubuntu 14.04, вы можете остановить/запустить/получить статус php5-fpm с помощью служебных команд: IE эти работают нормально:

# 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

Примечание ничего не возвращается, и процесс не останавливается. Аналогично для версий состояния и запуска ничего не возвращается и процесс не изменяется.

Я нашел строку, что он завершает сценарий init_is_upstart.... init_is_upstart:

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

Конечно, здесь должно быть указано сообщение об ошибке... например "Использовать служебные команды для остановки/запуска php-fpm".

Ответ 2

У меня была аналогичная проблема, связанная с php5-fpm на Ubuntu 14.10. Я настроил php5-fpm для одного из виртуальных хостов, и, пытаясь просмотреть сайт, я получил 503 Service Unavailable. Каждый раз, когда я пытался

[email protected]:~# service php5-fpm restart
stop: Unknown instance:
php5-fpm start/running, process 2775

Я получил в syslog следующее:

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 для этого виртуального пула. Он был настроен для перечисления на TCP-порт со следующей конфигурацией в /etc/php5/fpm/pool.d/www.conf. Я правильно проинструктировал список пулов следующим образом:

listen = 127.0.0.1:9000

Я попытался перезапустить несколько раз с помощью служебной команды, и поскольку она не работала, я решил проверить сценарии запуска. Я отредактировал файл /etc/init/php5-fpm.conf, и я заметил, что у меня уже есть последняя исправленная ошибка строки "reload signal 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

Я выполнил его в оболочке и заметил следующее:

[email protected]:~# /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. Служба начала работу и открыла прослушиватель tcp на требуемом порту 9000. Призрак также начал работать. Поэтому всегда проверяйте синтаксис и конфигурацию php-fpm с помощью приведенной выше команды, чтобы избежать проблем с запуском службы.

Ответ 3

Обычно сценарий инициализации не всегда выплюнет проблему, вызвав ситуацию. Ваш лучший вариант - cat/etc/init.d/php5-fpm и найти команду, которую он пытается запустить, а затем использовать эту команду для запуска процесса вручную.

Говоря по опыту сценариев запуска FPM, FPM, как правило, выплевывает ошибку, которую вы не можете увидеть или отсутствует в случайных файлах журналов, а затем вы сможете найти и исправить эту ошибку. После того, как вы решите, ваш сценарий инициализации должен быть хорошим, чтобы идти дальше.