您现在的位置是:首页 >技术杂谈 >php-fpm设置开机启动网站首页技术杂谈

php-fpm设置开机启动

简介php-fpm设置开机启动

看了nginx和redis的shell启动脚本,发现服务的开启和关闭其实就是操作服务进程号,那么给php服务也写个shell脚本,也能实现service start 和 stop 

 进入Linux服务的初始化目录

[root@1 ]# cd /etc/init.d/

# 或者

[root@1 init.d]# cd /etc/rc.d/init.d/

创建phpfpmd进程脚本(进程控制脚本规范上默认都加后缀d)

vim phpfpmd
#!/bin/bash
# chkconfig:   2345 90 10
# description:  php-fpm is web server

#服务在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。

PHP_INI="/etc/php.ini"
PHP_FPM="/usr/local/php/sbin/php-fpm"
PHP_FPM_CONF="/usr/local/php/etc/php-fpm.conf"

#获取php-fpm的所有进程号
process=`pgrep php-fpm`

#echo "php-fpm process: $process"

case "$1" in
    start)
        if [ -n "$process" ]
        then
                echo ">>> php-fpm process is already running"
        else
                echo ">>> Starting php-fpm ..."
                $PHP_FPM -c $PHP_INI -y $PHP_FPM_CONF
        fi
        ;;
    stop)
        if [ ! -n "$process" ]
        then
                echo ">>> php-fpm process is not running"
        else
                echo ">>> php-fpm stopping ..."
                
                kill -15 $process
                
                while [ ! -n `pgrep php-fpm` ]
                do
                    echo ">>> Waiting for php-fpm to shutdown ..."
                    sleep 1
                done
                echo ">>> php-fpm stopped"
        fi
        ;;
    *)
        echo ">>> Please use start or stop as first argument"
        ;;
esac

 第一行,说明shell的运行环境,有些服务器默认是sh,dbash,和 bash 还是有区别的,比如:dbash相等只支持一个=,而bash里可以用==表示,具体参考附录资料。

第二行和第三行,必须加的,因为chkconfig无法识别php-fpm服务,要手动加到运行级别中。

还有个知识点,关闭服务的命令一般用-15,由服务自己发起关闭,保证没有未处理完的进程在运行。

验证脚本

[root@init.d]# ./phpfpmd start
>>> Starting php-fpm ...

[root@init.d]# ./phpfpmd start
>>> php-fpm process is already running

[root@init.d]# ./phpfpmd stop
>>> php-fpm stopping ...
>>> php-fpm stopped

[root@init.d]# ./phpfpmd stop
>>> php-fpm process is not running

也可以用service

[~]$ sudo service phpfpmd stop
[sudo] user 的密码:
>>> php-fpm stopping ...
>>> php-fpm stopped

[~]$ sudo service phpfpmd start
>>> Starting php-fpm ...

将phpfpmd加入服务运行级别

[root@1 init.d]# chkconfig phpfpmd on
[root@1 init.d]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysql          	0:关	1:关	2:开	3:开	4:开	5:开	6:关
netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
nginx          	0:关	1:关	2:开	3:开	4:开	5:开	6:关
phpfpmd        	0:关	1:关	2:开	3:开	4:开	5:开	6:关
redisd         	0:关	1:关	2:开	3:开	4:开	5:开	6:关

重启机器

[root@1 init.d]# reboot

查看服务是否开启

[~]$ ps -ef | grep php-fpm
root      3154     1  0 10:11 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
newton    3155  3154  0 10:11 ?        00:00:00 php-fpm: pool www
newton    3156  3154  0 10:11 ?        00:00:00 php-fpm: pool www
newton    3157  3154  0 10:11 ?        00:00:00 php-fpm: pool www
newton    3158  3154  0 10:11 ?        00:00:00 php-fpm: pool www
newton    3159  3154  0 10:11 ?        00:00:00 php-fpm: pool www
newton    3161  3085  0 10:11 pts/1    00:00:00 grep --color=auto php-fpm

附录资料

linux中的sh、dash、bash的区别

LINUX系统的7种运行级别

redis_init_script详解

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。