183

I need to reload my php.ini and there's nothing in the help dialog about restarting it.

Digital site
  • 190
  • 1
  • 10
Galen
  • 1,983
  • 2
  • 12
  • 10

18 Answers18

335

Note: prepend sudo if not root

  • Using SysV Init scripts directly:

    /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
    
  • Using service wrapper script

    service php-fpm restart    # typical
    service php5-fpm restart   # debian-style
    service php7.0-fpm restart # debian-style PHP 7
    
  • Using Upstart (e.g. ubuntu):

    restart php7.0-fpm         # typical (ubuntu is debian-based) PHP 7
    restart php5-fpm           # typical (ubuntu is debian-based)
    restart php-fpm            # uncommon
    
  • Using systemd (newer servers):

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

Or whatever the equivalent is on your system.

tylerl
  • 14,885
  • 7
  • 49
  • 71
  • 2
    What about on a Mac? php-fpm was installed using homebrew. `which php-fpm` gives `/usr/local/sbin/php-fpm`. – hobbes3 Mar 16 '13 at 23:06
  • 6
    @hobbes3 try `brew services restart php56` (if you get an error about no available formula, try a different version e.g. php5 or php55). If you don't have brew services installed, it should install it for you on the first run. – Doktor J Dec 21 '15 at 22:22
  • None of the above worked for me, but this did: `service php-fcgi-mydomain-com restart` And I had to repeat it for every domain from sites-enabled – Ilyich Mar 12 '18 at 19:01
  • This one was the good one for me (centOs) : `systemctl reload php70-php-fpm` – 4wk_ Jul 25 '18 at 12:58
  • I'm on Ubuntu 16.04 and this seemed to work: `systemctl restart php5.6-fpm.service` – relipse Dec 07 '18 at 19:36
30

For Mac OS X, this is what I do:

Make a script /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

Then:

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

make sure /usr/local/sbin is in your $PATH

then just call it from the terminal fpm-restart and BOOM!!

Falcon Momot
  • 24,975
  • 13
  • 61
  • 92
Diego Antunes
  • 401
  • 4
  • 2
22

Usually, service php5-fpm restart will do fine, on an up-to-date distribution.

But somtimes, it fails, telling you restart: Unknown instance: (or such).

Now, if you do not like to reboot your server, just kill the processes and have a fresh start (edited as of here):

$ sudo pkill php5-fpm; sudo service php5-fpm start
BurninLeo
  • 860
  • 2
  • 11
  • 28
13

This should work:

pkill -o -USR2 php-fpm
pkill -o -USR2 php5-fpm
dialt0ne
  • 3,027
  • 17
  • 27
  • 3
    If you installed PHP-FPM via homebrew on a Mac, the first command works a lot better than unload+load'ing the plist – Alan Ivey Jul 19 '13 at 21:01
  • OSX: `killall php-fpm` – ptim Aug 22 '14 at 14:28
  • On OSX the above gave me an error "Unknown user SR2". Reversing the arguments fixed it: "pkill -USR2 -o php-fpm" – Keeth Jan 09 '15 at 11:44
  • Exactly what I needed to restart FPM in a container, thanks! – Adrian Günter Oct 27 '15 at 00:32
  • I am using the pre-installed, or bundled with xcode, version of php and its associated -fpm for some reason, and not through Homebrew. Just thought I should use what's there already. I am using a combination of `php-fpm --prefix /usr/local`, making some directories under that one it needs, and as @Keeth has stated, `pkill -USR2 -o php-fpm`, checking with `pgrep -l fpm`, and the PIDs do indeed change! I had no plist files or services to take advantage of mentioned by some of the other answers. – Pysis Aug 10 '17 at 03:41
12

For Mac OSX brew services restart php56 worked for me.

Blake Frederick
  • 221
  • 3
  • 5
11

I had a problem restarting php7-fpm, because I didn't knew how exactly the service was named. This function gave me the answer:

service --status-all

php7-fpm service in my Ubuntu was called php7.0-fpm, so I did:

service php7.0-fpm restart

Gediminas
  • 217
  • 2
  • 8
6

php-fpm will restart if you send a USR2 signal to the main process:

sudo kill -USR2 php-fpm_main_process_id

So we just need to instruct php-fpm to record its pid somewhere. In this example, I'll assume you want to save it at /etc/private/php-fpm.pid, and that php-fpm runs as user _php. First, add this line to the configuration file:

pid = /etc/php-fpm.pid

Then create the file /etc/php-fpm.pid, and make sure php-fpm has permission to modify it:

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

Now, next time php-fpm starts, you'll be able to get its pid and restart it like this:

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

Or you can combine these into a single command:

$ sudo kill -USR2 `cat /etc/private/php-fpm.pid`
Pitarou
  • 161
  • 1
  • 3
  • I am liking @dialt0ne's and @Keeth's `pkill ...` answer & comment above more; shorter and simpler. – Pysis Aug 10 '17 at 03:43
  • this is better, and nice explanation. the pkill runs the risk, if you don't get the processes matched correctly, of killing off your other PHP clusters if you happen to have them running on the same box (yes this is bad practice). – Richard Oct 30 '17 at 16:47
3

For me I had just upgraded via apt and the service restart wasn't working. I ended up needing to kill the existing processes before it worked using: killall php5-fpm

Pooch
  • 161
  • 2
2

To allow the PHP-FPM restart script to work, you must use specify a PID file in your php-fpm.conf file. i.e.

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

The default value for pid in php-fpm.conf is nothing, which means to not create a PID file, which means that the restart script can't tell which process to end during the restart.

Danack
  • 1,186
  • 1
  • 14
  • 27
2

On 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
Fokwa Best
  • 171
  • 6
2

On Ubuntu 16 with php 5.6 fpm.

 /etc/init.d/php5.6-fpm restart
MrPHP
  • 141
  • 6
1

On RedHat / CentOS 7 using PHP 7 from 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

or if you're using 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
1

The simplest way to find the name of php-fpm service is to search for it:

systemctl -l --type service --all | grep fpm
0

For old versions of debian & ubuntu - php 5.6 it will be

 /etc/init.d/php-fpm56 restart
 service php-fpm56 restart
Michael Hampton
  • 237,123
  • 42
  • 477
  • 940
0

On Windows:

  1. Open Services in the Management Console:

    Start -> Run -> "services.msc" -> OK
    
  2. Select php-fpm from the list

  3. Rightclick and select restart
Gerald Schneider
  • 19,757
  • 8
  • 52
  • 79
0

On Alpine with nginx this is working here:

To kill all php-fpm7 processes:

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

To start php-fpm7:

php-fpm7

Junior Mayhé
  • 185
  • 1
  • 10
0

To list systemd services on CentOS/RHEL 7.x+ use

systemctl

To list all services:

systemctl list-unit-files

Where you can find service named * php-fpm * copy service name and run the following command

systemctl restart ea-php72-php-fpm.service

NOTE : ea-php72-php-fpm.service user your service name

-2

Another method for MaxOS

Open ActivityMonitor, search php-fpm, find the pid.

Open terminal, use kill [pid] to stop php-fpm

Then php-fpm on terminal to start it.

If there is error information that 127.0.0.1:9000 Already in use, just ignore that.

Refresh Nginx page, should see php.ini changes take effects.

  • What is MaxOS? Just running `php-fpm` will most probably run it under the wrong user; ignoring error messages is never a good idea. – Gerald Schneider Sep 23 '19 at 08:44