Monit can be used to monitor your services on your VPS or dedicated server. You can use Monit to make sure php7-fpm is always running in case it halts or freezes up – this is very rare but it is better to be safe than sorry.
Monit will check the php7-fpm process by looking at the socket it is listening on. If the socket cannot be detected Monit will restart the php7-fpm service. This way you ensure your web site, perhaps running WordPress, is always running essential processes. Cloudways uses this monitoring technique with Monit on all of its managed VPS.
If you need to install Monit on Ubuntu or Debian then follow this guide.
Use Monit to Monitor + Restart PHP7-FPM Service Automatically
Monit needs some information to check to see if php7-fpm is healthy.
We will use the socket php7-fpm is using and its pid file.
Find php7-fpm Unix or TCP Socket
php7-fpm can listen on either unix sockets or TCP sockets. To find out use this command
grep "listen =" /etc/php/7.0/fpm/pool.d/www.confIf you see this output then php7-fpm is using unix sockets
listen = /run/php/php7.0-fpm.sockIf you see this output then php7-fpm is using TCP sockets, the loopback interface 127.0.0.1 on port 9000
listen = 127.0.0.1:9000Find php7-fpm pid file
Monit needs the pid file as well
sudo find /run -iname php*.pidYou should see some output like this
/run/php/php7.0-fpm.pidNow we have the information necessary to configure Monit for php7-fpm monitoring.
Configure Monit to Monitor php7-fpm
Create a Monit php7-fpm configuration, you may use the conf-enabled folder instead of conf.d, check your /etc/monit/monitrc file to verify.
sudo nano /etc/monit/conf.d/php7-fpmThis Monit php7-fpm configuration is for unix sockets.
It checks for the php7-fpm.pid file and if it doesn’t exist Monit will try to restart it.
Monit is also going to check that the php7-fpm unix socket exists: /var/run/php7.0-fpm.sock
check process php7-fpm with pidfile /run/php/7.0/php7-fpm.pid
start program = "/usr/sbin/service php7.0-fpm start" with timeout 60 seconds
stop program = "/usr/sbin/service php7.0-fpm stop"
if failed unixsocket /var/run/php7.0-fpm.sock then restart
If you are using TCP sockets then this will be your Monit configuration.
Monit looks for a daemon listening on 127.0.0.1 on port 9000, if not found Monit will restart php7-fpm after 3 CPU cycles.
Change 127.0.0.1 to match your interface and 9000 if it was different when you checked earlier.
check process php7-fpm with pidfile /run/php/7.0/php7-fpm.pid
start program = "/usr/sbin/service php7.0-fpm start" with timeout 60 seconds
stop program = "/usr/sbin/service php7.0-fpm stop"
if failed host 127.0.0.1 port 9000 type tcp for 3 cycles then restartCheck the Monit configuration has valid syntax
sudo monit -tYou should see this message indicating the Monit syntax is OK.
Control file syntax OKThen reload Monit to activate the configuration
sudo service monit reloadYou can check your php7-fpm Monit status on port 2812 or whichever port you have specified Monit should run on.
If you want email alerts from Monit via Mailgun alerts follow this guide. For Monit emails via Sendgrid follow this guide.

Now your php7-fpm service will automatically restart if it ever fails.

Thank’s for a nice tutorial.