Nginx服务的启停有两种方式
- 给nginx进程发送信号
- 运行nginx命令(即运行nginx软件 /sbin/ 目录下的二进制文件nginx)
给nginx进程发送信号
发送信号
发送信号的命令:kill -SIGNAL pid
获取Nginx进程号
kill命令中必须给出nginx进程的进程号pid。
nginx服务工作过程中,会启动一个master进程,和多个工作进程worker_proccesser,kill命令中的pid参数是指master进程号。
获取nginx master进程号的方式有两种:
- /logs/nginx.pid文件中存储着master进程号,可以通过
cat logs/nginx.pid
命令获取 -
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`
平滑升级
- 先备份老版本的安装好的nginx软件目录
- 将新版本的nginx软件安装到旧安装目录中
- 先执行
kill USR2 pid
命令,nginx服务接到USR2信号后,会将nginx.pid文件的名称改为nginx.pid.oldbin,然后执行新版本的nginx二进制文件启动新的服务。 - 如果启动成功,服务器上将有两个nginx服务共同提供web服务。这时需要向旧的服务发送winch信号,使旧的服务的工作进程平缓停止。
- 然后删除nginx.pid.oldbin文件。