Nginx学习笔记系列五:Nginx的启动和停止
方式一:Nginx服务的信号控制
1. Nginx中的master和worker进程
2. Nginx的工作方式
3. 如何获取进程的PID
4. 信号有哪些
5. 如果通过信号控制Nginx的启停等相关操作
前面提到Nginx的高性能,其实和他的架构有关系。Nginx默认采用的是多进程的方式来工作的,当Nginx的启动后,可以通过ps -ef| grep nginx
命令查看到如下内容:
从上图可以看出,Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接受外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动启动新的worker进程。而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等且相互独立的。处理请求的机会也是一样的。Nginx的进程模型,如下图所示:
作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候需要两个前提条件,一个是要操作的master进程,一个是信号:
- 获取master进程id的方式:
- 通过
ps -ef | grep nginx
查看 - 通过
nginx.pid
文件查看
- 通过
- 信号
信号 作用 TERM/INT 立即关闭整个服务 QUIT 优雅的关闭整个服务 HUP 重新加载配置文件,并使新配置项对服务生效 USR1 重新打开日志文件,可以用来进行日志切割 USR2 平滑升级到最新版的Nginx WINCH 所有子进程不再接收处理新连接,相当于给worker进程发送QUIT指令
调用命令kill -signal pid
,如kill -TERM pid
,立即关闭Nginx整个服务,其他类似。
关于USR2信号的说明
发送USR2给master进程,告诉master进程要平滑升级,这时候会重新开启新的master进程和worker进程,整个系统中将存在两个master进程,并且新的master进程的pid会被记录在/usr/local/nginx/logs/nginx.pid
文件中,而之前旧的master的进程的pid会被记录在/usr/local/nginx/logs/nginx.pid.oldbin
文件中,接着再次发送QUIT
信号给旧的master进程,让其处理完请求后关闭。
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
方式二:Nginx常用命令
./nginx # 启动nginx服务
./nginx -s stop # 快速停止
./nginx -s quit # 优雅关闭,在退出前完成所有的已连接请求
./nginx -s reload # 重新加载配置文件
./nginx -s reopen # 重新打开日志文件,类似于USR1信号的作用
本作品采用《CC 协议》,转载必须注明作者和本文链接