LMLPHP后院

php-fpm 顺滑的启动 重启 终止操作技术

maybe yes 发表于 2021-04-21 16:26

很多时候,我们被 service, /etc/init.d/ 洗脑了,觉得来个方便的操作应该是那样,想起当年老师讲 signal 的时候,觉得排不上用场,通信一般都是 socket 的啊,有谁会用信号来进行进程的通信呢?这不,signal 肯定是有优点的,我们习惯了 kill 掉一个命令,却总是忘记了使用信号来的更加优雅。

启动 php-fpm

/usr/local/php/sbin/php-fpm

php 5.3.3 以后的 php-fpm 不再支持 php-fpm 以前具有的 php-fpm (start|stop|reload) 等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制。 

fpm master 进程可以理解以下信号:

  • INT, TERM 立刻终止
  • QUIT 平滑终止
  • USR1 重新打开日志文件
  • USR2 平滑重载所有 worker 进程并重新载入配置和二进制模块

很多大神要骂了,这就是宗教信仰啊,定义的这么奇怪。

一个简单直接的重启方法,查看 php-fpm 的 master 进程号

# ps aux|grep php-fpm
root       437  0.0  0.4 216312  9136 ?        Ss   4月08   1:54 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
www-data   598  0.0  0.8 217360 16148 ?        S    4月08   0:06 php-fpm: pool www
www-data   599  0.0  0.7 217100 15076 ?        S    4月08   0:06 php-fpm: pool www
pi       27083  0.0  0.0   6168   648 pts/3    S+   12:05   0:00 grep --color=auto php-fpm

重启 php-fpm:

kill -USR2 437

顺滑的重启好了。

上面方案一般是没有生成 php-fpm.pid 文件时使用,如果已生成 php-fpm.pid,使用下面这种方案。

上面 master 进程可以看到,matster 使用的是 /etc/php/7.3/fpm/php-fpm.conf 这个配置文件,cat /etc/php/7.3/fpm/php-fpm.conf 发现:

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
;pid = run/php-fpm.pid

pid 文件路径应该位于 /var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再 kill -USR2 437 重启 php-fpm,便会生成 pid 文件,下次就可以使用以下命令重启、关闭 php-fpm 了:

php-fpm 关闭:
kill -INT 'cat /var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /var/run/php-fpm.pid'

使用信号来控制,返璞归真,性能好啊,这才是应用开发的标准操作

2021-05-14 09:06:28 1620954388 0.020572