CentOS / Red Hat PHP FastCGI script For Ngnix / Lighttpd / Apache Webserver

A shell script to start / stop / restart php-cgi as an app server. By default it will bind to 127.0.0.1 IP and 9000 port using spawn-fcgi. This script is tested on CentOS / RHEL / Fedora Linux only. FreeBSD specific version available here.

How do I use this script?

Install spawn-fcgi package using yum command.

Download this script and place in /etc/init.d/ directory as /etc/init.d/php_cgi
# wget http://bash.cyberciti.biz/dl/419.sh.zip -O /etc/init.d/php_cgi
# chmod +x /etc/init.d/php_cgi

php_cgi init.d sysv style script

#!/bin/sh
#
# php-cgi - php-fastcgi swaping via  spawn-fcgi
#
# chkconfig:   - 85 15
# description:  Run php-cgi as app server
# processname: php-cgi
# config:      /etc/sysconfig/phpfastcgi (defaults RH style)
# pidfile:     /var/run/php_cgi.pid
# Note: See how to use this script : 
# https://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
spawnfcgi="/usr/bin/spawn-fcgi"
php_cgi="/usr/bin/php-cgi"
prog=$(basename $php_cgi)
server_ip=127.0.0.1
server_port=9000
server_user=nginx
server_group=nginx
server_childs=5
pidfile="/var/run/php_cgi.pid"
 
# do not edit, put changes in /etc/sysconfig/phpfastcgi
[ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi
 
start() {
    [ -x $php_cgi ] || exit 1
    [ -x $spawnfcgi ] || exit 2
    echo -n $"Starting $prog: "
    daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}
    retval=$?
    echo
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} $prog -QUIT
    retval=$?
    echo 
    [ -f ${pidfile} ] && /bin/rm -f ${pidfile}
    return $retval
}
 
restart(){
	stop
	sleep 2
	start
}
 
rh_status(){
	status -p ${pidfile} $prog
}
 
case "$1" in
    start)
        start;;
    stop)
        stop;;
    restart)
        restart;;
    status)
        rh_status;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 3
esac
Get the latest tutorials on SysAdmin, Linux/Unix, Open Source, and DevOps topics:
CategoryList of Unix and Linux commands
File Management cat
Firewall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilities dig host ip nmap
OpenVPN CentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Manager apk apt
Processes Management bg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searching grep whereis which
User Information groups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPN CentOS 8 Debian 10 Firewall Ubuntu 20.04
5 comments… add one
  • Atesin Mar 8, 2012 @ 18:07

    if you run the web server in the same machine, better you use unix sockets .. modify this couple lines

    ~24
    #server_ip=127.0.0.1
    #server_port=9000
    server_socket=/var/lib/php/php-cgi.sock

    ~40
    #daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}
    daemon $spawnfcgi -s ${server_socket} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}

  • Antony Mar 1, 2011 @ 11:55

    I have used this script with CentOS 5.5. I have nginx, php5 installed following your tutorial. I installed spawn-fcgi with yum from epel. I have in chkconfig a service called spawn-fcgi and a service called php_cgi.
    if i run service spawn-fcgi it doesn’t start whereas service php_cgi start works great!
    When the server reboot it does not start php_cgi auomatically..why?
    Thanks.

  • Diesel Feb 22, 2010 @ 9:28

    Thx! Script is very useful!

  • Kylix.Tan Dec 31, 2009 @ 2:15

    I am not sure if there is daemon command in redhat/centos distribution or somewhere else

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.