Не удается запустить или остановить 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, как правило, выплевывает ошибку, которую вы не можете увидеть или отсутствует в случайных файлах журналов, а затем вы сможете найти и исправить эту ошибку. После того, как вы решите, ваш сценарий инициализации должен быть хорошим, чтобы идти дальше.