简述
nginx 实际上上通过信号量去控制进程的,平时所有的关闭、重启等操作的原理都是通过不同的信号发送给nginx 主进程来完成的。
信号量
TERM, INT Quick shutdown (强制关闭,暴力操作,正常进行的请求突然中断)
QUIT Graceful shutdown (优雅关闭,会在请求处理完成之后,自动关闭) HUP Configuration reload Start the new worker processes with a new configuration Gracefully shutdown the old worker pro cesses (优雅的重新加载配置文件,如果修改完配置文件,需要重启的话,可以使用这个信号量,使用该信号量重启并不会关闭进程和中断请求)
USR1 Reopen the log files (重写一个日志文件)
USR2 Upgrade Executable on the fly (升级执行文件)
WINCH Gracefully shutdown the worker processes (优雅的关闭工作进程)
实际应用
1、 kill -HUP/INT/.. pid(nginx master)
2、 ../sbin/nginx -s reload 等效于 kill -HUP pid #加载新的配置,master 进程不变,逐步停止没有请求的work启动新的worker进程。
3、 kill -USR1 pid 重新打开日志文件,日志备份时使用。(由于linux 中是通过inode 识别文件的,所以即使重命名文件名字变了但是inode 不变。日志备份把旧日志改名为access.log.bak后新建一个access.log ,发送USR1信号nginx 进程就会关闭正在打开写入的文件,重新写入新的access.log)
4、USR2与WINCH 当需要把正在运行的nginx 进程平滑升级的时候配合使用
5、nginx pid 一般主配置文件会配置它保存在 ../logs/nginx.pid中,nginx 启动脚本在关闭nginx 时候会删除此文件,启动的时候生成此文件,根据此文件判定是否启动。