Я пытаюсь установить 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.
Быстрый ответ … вы не используете скрипты 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».
У меня была аналогичная проблема, связанная с php5-fpm на Ubuntu 14.10. Я настроил php5-fpm для одного из виртуальных хостов, и, пытаясь просмотреть сайт, я получил 503 Service Unavailable. Каждый раз, когда я пытался
root@testupgrade:~# 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
Я выполнил его в оболочке и заметил следующее:
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. Служба начала работу и открыла прослушиватель tcp на требуемом порту 9000. Призрак также начал работать. Поэтому всегда проверяйте синтаксис и конфигурацию php-fpm с помощью приведенной выше команды, чтобы избежать проблем с запуском службы.
Обычно сценарий инициализации не всегда выплюнет проблему, вызвав ситуацию. Ваш лучший вариант – cat /etc/init.d/php5-fpm
и найти команду, которую он пытается запустить, а затем использовать эту команду для запуска процесса вручную.
Говоря по опыту сценариев запуска FPM, FPM, как правило, выплевывает ошибку, которую вы не можете увидеть или отсутствует в случайных файлах журналов, а затем вы сможете найти и исправить эту ошибку. После того, как вы решите, ваш сценарий инициализации должен быть хорошим, чтобы идти дальше.