这篇文章主要介绍了Nginx和PHP-FPM的启动、重启、停止脚本,脚本中包含start、stop、reload、restart等常用的管理方法,并可以加入系统服务然后使用servicem命令管理。

服务器上的Nginx和PHP都是源码编译安装的,不像ubuntu一样有自带service启动脚本,所以不支持类似以前的nginx (start|restart|stop|reload)。

自己动手丰衣足食,以下脚本应该在RHEL, Fedora, CentOS下都适用。

一、Nginx启动脚本/etc/init.d/nginx

#!/bin/bash

#

# Startup script for Nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}

restart() {

    configtest || return $?

    stop

    sleep 1

    start

}

reload() {

    configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}

force_reload() {

    restart

}

configtest() {

  $nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

    status $prog

}

rh_status_q() {

    rh_status >/dev/null 2>&1

}

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

        exit 2

esac

编辑好后保存,执行以下命令

sudo chmod +x /etc/init.d/nginx

 

sudo /sbin/chkconfig nginx on

# 检查一下

sudo /sbin/chkconfig --list nginx

nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off

完成!

可以使用以下命令管理Nginx

service nginx start

 

service nginx stop

service nginx restart

service nginx reload

/etc/init.d/nginx start

/etc/init.d/nginx stop

/etc/init.d/nginx restart

/etc/init.d/nginx reload


二、PHP-FPM启动脚本/etc/init.d/php-fpm

#!/bin/bash

 

#

# Startup script for the PHP-FPM server.

#

# chkconfig: 345 85 15

# description: PHP is an HTML-embedded scripting language

# processname: php-fpm

# config: /usr/local/php/etc/php.ini

# Source function library.

. /etc/rc.d/init.d/functions

PHP_PATH=/usr/local

DESC="php-fpm daemon"

NAME=php-fpm

# php-fpm路径

DAEMON=$PHP_PATH/php/sbin/$NAME

# 配置文件路径

CONFIGFILE=$PHP_PATH/php/etc/php-fpm.conf

# PID文件路径(在php-fpm.conf设置)

PIDFILE=$PHP_PATH/php/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

rh_start() {

  $DAEMON -y $CONFIGFILE || echo -n " already running"

}

rh_stop() {

  kill -QUIT `cat $PIDFILE` || echo -n " not running"

}

rh_reload() {

  kill -HUP `cat $PIDFILE` || echo -n " can't reload"

}

case "$1" in

  start)

        echo -n "Starting $DESC: $NAME"

        rh_start

        echo "."

        ;;

  stop)

        echo -n "Stopping $DESC: $NAME"

        rh_stop

        echo "."

        ;;

  reload)

        echo -n "Reloading $DESC configuration..."

        rh_reload

        echo "reloaded."

  ;;

  restart)

        echo -n "Restarting $DESC: $NAME"

        rh_stop

        sleep 1

        rh_start

        echo "."

        ;;

  *)

         echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2

         exit 3

        ;;

esac

exit 0

编辑好后保存,执行以下命令

sudo chmod +x /etc/init.d/php-fpm

 

sudo /sbin/chkconfig php-fpm on

# 检查一下

sudo /sbin/chkconfig --list php-fpm

php-fpm           0:off   1:off   2:on    3:on    4:on    5:on    6:off

完成!

可以使用以下命令管理php-fpm

service php-fpm start

 

service php-fpm stop

service php-fpm restart

service php-fpm reload

/etc/init.d/php-fpm start

/etc/init.d/php-fpm stop

/etc/init.d/php-fpm restart

/etc/init.d/php-fpm reload

应用实例

# cat  /etc/init.d/nginx

#!/bin/bash
# mimvp.com
# 2014-10-22
#
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
.  /etc/rc.d/init.d/functions
# Source networking configuration.
.  /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
    if [ -e $nginx_pid ];then
        echo "nginx already running...."
            exit 1
            fi
            echo -n $"Starting $prog: "
            daemon $nginxd -c ${nginx_config}
    RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
        return $RETVAL
}
# Stop nginx daemons functions.
stop() {
    echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}

reload() {
    echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
        killproc $nginxd -HUP
        RETVAL=$?
        echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL

CentOS 7 系统,需要配置 

cat /usr/lib/systemd/system/nginx.service

[Unit]  
Description=nginx  
After=network.target  
   
[Service]  
Type=forking  
ExecStart=/etc/init.d/nginx start  
ExecReload=/etc/init.d/nginx restart  
ExecStop=/etc/init.d/nginx  stop  
PrivateTmp=true  
   
[Install]  
WantedBy=multi-user.target

cat  /etc/init.d/php-fpm

#!/bin/bash
# mimvp.com
# 2014-10-22
#
# Startup script for the PHP-FPM server.
#
# chkconfig: 345 85 15
# description: PHP is an HTML-embedded scripting language
# processname: php-fpm
# config: /usr/local/php/etc/php.ini

# Source function library.
. /etc/rc.d/init.d/functions

PHP_PATH=/usr/local
DESC="php-fpm daemon"
NAME=php-fpm
# php-fpm路径
DAEMON=$PHP_PATH/php/sbin/$NAME
# 配置文件路径
    CONFIGFILE=$PHP_PATH/php/etc/php-fpm.conf
# PID文件路径(在php-fpm.conf设置)
    PIDFILE=$PHP_PATH/php/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
    test -x $DAEMON || exit 0

    rh_start() {
        $DAEMON -y $CONFIGFILE || echo -n " already running"
    }

rh_stop() {
    kill -QUIT `cat $PIDFILE` || echo -n " not running"
}

rh_reload() {
    kill -HUP `cat $PIDFILE` || echo -n " can't reload"
}

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
rh_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
rh_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
rh_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC: $NAME"
rh_stop
sleep 1
rh_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 3
;;
esac
exit 0

CentOS 7 系统,需要配置 

cat /usr/lib/systemd/system/php-fpm.service

[Unit]  
Description=php-fpm  
After=network.target  
   
[Service]  
Type=forking  
ExecStart=/etc/init.d/php-fpm start  
ExecReload=/etc/init.d/php-fpm restart  
ExecStop=/etc/init.d/php-fpm  stop  
PrivateTmp=true  
   
[Install]  
WantedBy=multi-user.target

注意点:

# php-fpm路径

DAEMON=$PHP_PATH/php/sbin/$NAME

# 配置文件路径

    CONFIGFILE=$PHP_PATH/php/etc/php-fpm.conf

# PID文件路径(在php-fpm.conf设置)

    PIDFILE=$PHP_PATH/php/var/run/$NAME.pid

    SCRIPTNAME=/etc/init.d/$NAME

配置文件和PID文件,需要在正确配置路径,PID文件在 /usr/local/php/etc/php-fpm.conf 中需要去掉注释!

 

 

参考推荐

LNMP(CentOS+Nginx+Mysql+PHP)服务器环境配置

CentOS 安装 Nginx

MongoDB 安装配置

CentOS 安装配置 MariaDB