Как вы перезапустите php-fpm?


184

Мне нужно перезагрузить мой php.ini, и в диалоге помощи нет ничего о его перезапуске.

Ответы:


335

Примечание : добавьте, sudoесли не root

  • Использование сценариев SysV Init напрямую:

    /etc/init.d/php-fpm restart    # typical
    /etc/init.d/php5-fpm restart   # debian-style
    /etc/init.d/php7.0-fpm restart # debian-style PHP 7
    
  • Использование скрипта сервисной обертки

    service php-fpm restart    # typical
    service php5-fpm restart   # debian-style
    service php7.0-fpm restart # debian-style PHP 7
    
  • Использование Upstart (например, Ubuntu):

    restart php7.0-fpm         # typical (ubuntu is debian-based) PHP 7
    restart php5-fpm           # typical (ubuntu is debian-based)
    restart php-fpm            # uncommon
    
  • Использование systemd (более новые серверы):

    systemctl restart php-fpm.service    # typical
    systemctl restart php5-fpm.service   # uncommon
    systemctl restart php7.0-fpm.service # uncommon PHP 7
    

Или любой другой эквивалент в вашей системе.


2
А как насчет Mac? php-fpm был установлен с помощью homebrew. which php-fpmдает /usr/local/sbin/php-fpm.
hobbes3

6
@ hobbes3 try brew services restart php56(если вы получаете сообщение об ошибке из-за отсутствия формулы, попробуйте другую версию, например php5 или php55). Если у вас не установлены службы brew, он должен установить его для вас при первом запуске.
Доктор J

Ничто из вышеперечисленного не сработало для меня, но это сработало: service php-fcgi-mydomain-com restartи мне пришлось повторять это для каждого домена с включенными сайтами
Ильич

Этот был для меня хорошим (centOs):systemctl reload php70-php-fpm
4wk_

Я на Ubuntu 16.04, и это, кажется, работает: systemctl restart php5.6-fpm.service
relipse

30

Для Mac OS X это то, что я делаю:

Сделайте скрипт /usr/local/etc/php/fpm-restart:

#!/bin/sh

echo "Stopping php-fpm..."
launchctl unload -w ~/Library/LaunchAgents/homebrew-php*.plist

echo "Starting php-fpm..."
launchctl load -w ~/Library/LaunchAgents/homebrew-php*.plist

echo "php-fpm restarted"
exit 0

Затем:

chmod ug+x /usr/local/etc/php/fpm-restart
cd /usr/local/sbin
ln -s /usr/local/etc/php/fpm-restart

убедитесь, что / usr / local / sbin находится в вашем $ PATH

тогда просто вызовите его из терминала fpm-restart и BOOM !!


4
Используйте, homebrew.mxcl.php*.plistесли это не сработает
Даниил Рыжков

github.com/Homebrew/homebrew-php#install-multiple-versions - это случай, когда вы не можете найти этот файл .plist.
Фрэнк Фанг

Brew Services в основном делает то, что делает ваш скрипт.
Qiulang

22

Как правило, все service php5-fpm restartбудет в порядке, на современном распространении.

Но иногда это терпит неудачу, говоря вам restart: Unknown instance:(или тому подобное).

Теперь, если вы не любите перезагружать свой сервер, просто убейте процессы и начните все сначала (отредактировано здесь):

$ sudo pkill php5-fpm; sudo service php5-fpm start

Спасибо, это решило именно мою проблему. ( stop: Unknown instance:)
Ниллок

13

Это должно работать:

pkill -o -USR2 php-fpm
pkill -o -USR2 php5-fpm

3
Если вы установили PHP-FPM с помощью homebrew на Mac, первая команда работает намного лучше, чем unload + load'ing plist
Alan Ivey

OSX:killall php-fpm
ptim

На OSX выше сказанное мне выдало ошибку «Неизвестный пользователь SR2». Перестановка аргументов исправила это: «pkill -USR2 -o php-fpm»
Кит

Именно то, что мне нужно, чтобы перезапустить FPM в контейнере, спасибо!
Адриан Гюнтер,

Я использую предустановленную или в комплекте с xcode версию php и связанный с ней -fpm по какой-то причине, а не через Homebrew. Просто подумал, что я должен использовать то, что уже есть. Я использую комбинацию php-fpm --prefix /usr/local, создаю несколько каталогов под той, которая им нужна, и, как заявил @Keeth, pkill -USR2 -o php-fpmпроверка с помощью pgrep -l fpmи PID действительно меняются! У меня не было файлов или сервисов plist, чтобы воспользоваться упомянутыми в некоторых других ответах.
Пизис


12

У меня была проблема с перезапуском php7-fpm, потому что я не знал, как именно была названа служба. Эта функция дала мне ответ:

service --status-all

Служба php7-fpm в моем Ubuntu была вызвана php7.0-fpm, поэтому я сделал:

service php7.0-fpm restart


5
+1 заservice --status-all
JD

6

php-fpm перезапустится, если вы отправите сигнал USR2 основному процессу:

sudo kill -USR2 php-fpm_main_process_id

Так что нам просто нужно дать php-fpm команду записать свой pid. В этом примере я предполагаю, что вы хотите сохранить его в /etc/private/php-fpm.pid, а php-fpm работает как пользователь _php. Сначала добавьте эту строку в файл конфигурации:

pid = /etc/php-fpm.pid

Затем создайте файл /etc/php-fpm.pidи убедитесь, что php-fpm имеет разрешение на его изменение:

$ cd /etc
$ sudo touch php-fpm.pid
$ sudo chown _php php-fpm.pid
$ sudo chmod 644 php-fpm.pid

Теперь, когда в следующий раз запустится php-fpm, вы сможете получить его pid и перезапустить его так:

$ cat /etc/php-fpm.pid
815
$ sudo kill -USR2 815

Или вы можете объединить их в одну команду:

$ sudo kill -USR2 `cat /etc/private/php-fpm.pid`

Мне нравятся pkill ...ответы и комментарии @ dialt0ne's и @ Keeth выше; короче и проще.
Пизис

это лучше, и хорошее объяснение. pkill рискует, если вы не правильно сопоставите процессы, убить другие ваши PHP-кластеры, если у вас они работают на одном компьютере (да, это плохая практика).
Рич К.

3

Для меня я только что обновился через apt, и перезапуск службы не работал. Мне пришлось убить существующие процессы, прежде чем он работал, используя: killall php5-fpm


2

Чтобы скрипт перезапуска PHP-FPM работал, вы должны указать PID-файл в вашем файле php-fpm.conf. т.е.

pid = /var/run/php-fpm/php-fpm.pid

Значение по умолчанию для pid в php-fpm.conf - ничто, что означает не создавать файл PID, что означает, что скрипт перезапуска не может сказать, какой процесс завершить во время перезапуска.


2

На CentOS 7

sudo systemctl enable php-fpm // Just incase is disabled. Also ensures it starts automatically with the server

sudo systemctl start php-fpm  // Start the service

sudo systemctl stop php-fpm   // Stop the service

sudo systemctl status php-fpm  // View status


1

На RedHat / CentOS 7 с использованием PHP 7 от softwarecollections.org

service rh-php70-php-fpm start
service rh-php70-php-fpm stop
service rh-php70-php-fpm reload
service rh-php70-php-fpm restart
service rh-php70-php-fpm status

или если вы используете systemctl:

systemctl start rh-php70-php-fpm
systemctl stop rh-php70-php-fpm
systemctl reload rh-php70-php-fpm
systemctl restart rh-php70-php-fpm
systemctl status rh-php70-php-fpm


0

В Windows:

  1. Откройте Сервисы в Консоли управления:

    Start -> Run -> "services.msc" -> OK
    
  2. Выберите php-fpmиз списка

  3. Щелкните правой кнопкой мыши и выберите перезапустить


0

На Alpine с nginx это работает здесь:

Чтобы убить все процессы php-fpm7:

kill $(ps -o pid,comm | grep php-fpm7 | awk '{print $1}')

Чтобы запустить php-fpm7:

php-fpm7


0

Для получения списка системных служб в CentOS / RHEL 7.x + используйте

systemctl

Чтобы перечислить все услуги:

systemctl list-unit-files

Где вы можете найти службу с именем * php-fpm *, скопировать имя службы и выполнить следующую команду

Перезапуск systemctl ea-php72-php-fpm.service

ПРИМЕЧАНИЕ: ea-php72-php-fpm.service пользователь ваше имя службы


-2

Еще один метод для MaxOS

Откройте ActivityMonitor, найдите php-fpm, найдите pid.

Откройте терминал, используйте kill [pid]для остановки php-fpm

Затем php-fpmна терминале, чтобы запустить его.

Если есть информация об ошибке, которая уже используется 127.0.0.1:9000, просто игнорируйте ее.

Обновите страницу Nginx, чтобы изменения в php.ini вступили в силу.


Что такое MaxOS? Просто запуск php-fpm, скорее всего, запустит его не от того пользователя; игнорирование сообщений об ошибках никогда не бывает хорошей идеей.
Джеральд Шнайдер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.