Nginx学习笔记系列五:Nginx的启动和停止

方式一:Nginx服务的信号控制

1. Nginx中的master和worker进程
2. Nginx的工作方式
3. 如何获取进程的PID
4. 信号有哪些
5. 如果通过信号控制Nginx的启停等相关操作

前面提到Nginx的高性能,其实和他的架构有关系。Nginx默认采用的是多进程的方式来工作的,当Nginx的启动后,可以通过ps -ef| grep nginx命令查看到如下内容:

Nginx学习笔记系列五:Nginx的启动和停止

从上图可以看出,Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接受外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动启动新的worker进程。而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等且相互独立的。处理请求的机会也是一样的。Nginx的进程模型,如下图所示:

Nginx学习笔记系列五:Nginx的启动和停止

作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候需要两个前提条件,一个是要操作的master进程,一个是信号:

  1. 获取master进程id的方式:
    • 通过ps -ef | grep nginx查看
    • 通过nginx.pid文件查看
  2. 信号
    信号 作用
    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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
QIN秦同学
楼主这是什么课程笔记呀?还是读的什么书?
1年前 评论
Cyline (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!