How to Configure PHP-FPM to Start Automatically After Server Reboot in Linux


2 views

This is actually expected behavior in many Linux distributions. While services like Nginx are typically configured to start automatically through system init systems (SysVinit, systemd, etc.), PHP-FPM often isn't enabled for automatic startup by default.

First, let's verify whether PHP-FPM is configured to start at boot:

# For systemd systems (most modern distros):
systemctl is-enabled php-fpm

# For older SysVinit systems:
chkconfig --list php-fpm

For systemd Systems

To enable automatic startup:

sudo systemctl enable php-fpm
sudo systemctl start php-fpm

Verify the service will start at boot:

systemctl is-enabled php-fpm

For SysVinit Systems

sudo chkconfig php-fpm on
sudo service php-fpm start

If for some reason the above methods don't work, you can add this to /etc/rc.local (before the exit 0 line):

/etc/init.d/php-fpm start

If PHP-FPM still doesn't start automatically:

  • Check logs: journalctl -u php-fpm or /var/log/php-fpm.log
  • Verify the init script exists: ls -l /etc/init.d/php-fpm
  • Check for syntax errors: php-fpm -t

For production servers, I recommend:

# Create a systemd service file if missing
sudo cp /usr/lib/systemd/system/php-fpm.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now php-fpm

When running PHP-FPM with Nginx, you might encounter a situation where PHP-FPM fails to start automatically after a server reboot, while Nginx starts up just fine. This behavior can be confirmed by checking the service status or attempting a manual restart:

sudo systemctl status php-fpm
# or
sudo /etc/init.d/php-fpm restart

The most common reasons for PHP-FPM not starting automatically are:

  • The service isn't enabled in systemd (on modern Linux distributions)
  • Missing init.d scripts on older systems
  • Dependencies not being properly configured
  • Permission issues with the PHP-FPM socket

For most modern Linux distributions (Ubuntu 16.04+, CentOS 7+, etc.), use systemctl to enable the service:

sudo systemctl enable php-fpm
sudo systemctl start php-fpm

To verify it's set to start at boot:

sudo systemctl is-enabled php-fpm

For systems using SysV init, you can use chkconfig or update-rc.d:

On RedHat/CentOS:

sudo chkconfig php-fpm on

On Debian/Ubuntu:

sudo update-rc.d php-fpm defaults

Ensure your PHP-FPM pool configuration has proper permissions for the socket:

[www]
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

If PHP-FPM still doesn't start automatically:

  1. Check the error logs: sudo journalctl -u php-fpm or cat /var/log/php-fpm.log
  2. Verify dependencies: systemctl list-dependencies php-fpm
  3. Test the configuration: php-fpm -t

As a last resort, you can add this to root's crontab:

@reboot /etc/init.d/php-fpm start

Edit the crontab with:

sudo crontab -e