Nginx服务的启停有两种方式

  1. 给nginx进程发送信号
  2. 运行nginx命令(即运行nginx软件 /sbin/ 目录下的二进制文件nginx)

给nginx进程发送信号

发送信号

发送信号的命令:
kill -SIGNAL pid

获取Nginx进程号

kill命令中必须给出nginx进程的进程号pid。
nginx服务工作过程中,会启动一个master进程,和多个工作进程worker_proccesser,kill命令中的pid参数是指master进程号。
获取nginx master进程号的方式有两种:

  1. /logs/nginx.pid文件中存储着master进程号,可以通过cat logs/nginx.pid命令获取
  2. ps -ef | grep nginx 或者一步到位 ps -ef | grep nginx |grep master

信号

可以发送给Nginx进程的SIGNAL信号有以下6个

SIGNAL

说明

TERM|INT

直接停止nginx服务

QUIT

平缓停止

HUP

平滑重启,先使用新配置文件启动服务,再平缓停止旧的服务

USR2

平滑升级,先使用新版本的Nginx文件启动新的服务,在平缓停止旧的服务

WINCH

平缓停止工作进程,用于平滑升级后

USR1

用于分割日志文件

示例:

首先我们用nginx命令启动nginx服务:进入/opt/nignx/sbin目录下,执行如下命令
./nginx 然后,查看一下nginx服务的master进程号:
cat ../logs/nginx.pid 然后,发送HUP信号给master进程,平缓停止服务:

kill -HUP 4060		#此处4060即为我通过上一条命令查看到的master进程号

也可以直接将cat命令的结果作为kill的参数,平缓停止服务:

kill -HUP  `cat ../logs/nginx.pid`

nginx命令

kill命令可以通过发送信号给nginx进程来停止、重启、升级nginx服务,但是如果当前没有正在运行的nginx进程的情况下,要启动一个nginx服务时,还是要通过nginx命令来启动。
进入nginx软件的sbin目录下,执行如下命令:
./nginx -h

-?,-h         : 获取此命令的帮助信息
  -v            : 显示版本信息,然后退出命令
  -V            : 显示版本信息和执行./configure命令时的配置信息(例如执行./configure --prefix=/opt/nginx,则会将prefix配置信息显示出来),然后退出本命令
  -t            : 检查nginx服务配置文件是否有语法错误,然后退出本命令。可以与-c命令合用,来检查另外的配置文件。
  -T            : 检查配置文件是否有语法错误,并输出所有配置信息,然后退出本命令
  -q            : 与-t合用,如果配置文件语法正确,将不输出-t单独使用时输出的哪些信息。
  -s signal     : 向master进程发送信号: stop, quit, reopen, reload
  -p prefix     : 用来指定启动nginx服务时使用的配置文件的路径 (default: /opt/nginx/)
  -c filename   : 设置配置文件的路径 (default: conf/nginx.conf)
  -g directives : 用来补充Nginx配置文件,指定一些Nginx服务启动时应用于全局的配置

获取执行./configure 时的配置信息

进入nginx的sbin/目录,执行命令查看版本信息及配置信息:

./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/opt/nginx

测试新的配置文件语法是否正确

./nginx -Vc /opt/nginx2/nginx.conf

指定新的配置文件平滑重启服务

./nginx -reload -c /opt/nginx2/conf/nginx.conf

Nginx服务升级

先用命令./nginx -p newInstalPath设置启动服务时新版本的软件的安装路径。
接着kill -USR2 PID平滑启动新服务,
再发送指令kill -WINCH PID停止旧服务的工作进程

nginx接收到USR2信号后,会将原nginx.pid文件名更新为nginx.pid.oldbin,然后执行新版本的二进制nginx文件启动服务。此时,新旧两个版本都在提供服务,接着需要发送WINCH信号给旧版本的master进程,平滑停止旧服务的工作进程,并删除nginx.pid.oldbin文件。

Nginx服务平滑重启

kill -HUP pid

或者

./nginx -s reload

都可以平滑重启服务,但是前者不能指定新的配置文件。
另外,重启只重建工作进程,master进程并不会被停止。

强行停止nginx服务

kill 9 | SIGKILL `cat pid_file_path`

平滑升级

  1. 先备份老版本的安装好的nginx软件目录
  2. 将新版本的nginx软件安装到旧安装目录中
  3. 先执行kill USR2 pid命令,nginx服务接到USR2信号后,会将nginx.pid文件的名称改为nginx.pid.oldbin,然后执行新版本的nginx二进制文件启动新的服务。
  4. 如果启动成功,服务器上将有两个nginx服务共同提供web服务。这时需要向旧的服务发送winch信号,使旧的服务的工作进程平缓停止。
  5. 然后删除nginx.pid.oldbin文件。