发送信号
nginx -s signal
发送信号说明:
- 使用
nginx -s 命令发送信号
- 信号用于控制 Nginx 的行为
发送信号原理:
nginx -s 命令会向 Master 进程发送信号,Master 进程收到信号后,会根据信号执行相应的操作。
可用信号
| 信号 | 说明 | 对应系统信号 |
|---|
stop | 快速关闭 | SIGTERM |
quit | 优雅关闭 | SIGQUIT |
reopen | 重新打开日志文件 | SIGUSR1 |
reload | 重新加载配置 | SIGHUP |
信号说明:
stop:快速关闭 Nginx,立即终止所有进程
quit:优雅关闭 Nginx,等待当前请求完成
reopen:重新打开日志文件,用于日志轮转
reload:重新加载配置,不中断服务
示例
nginx -s reload
nginx -s reopen
nginx -s quit
nginx -s stop
示例说明:
nginx -s reload:重新加载配置,不中断服务
nginx -s reopen:重新打开日志文件,用于日志轮转
nginx -s quit:优雅关闭 Nginx,等待当前请求完成
nginx -s stop:快速关闭 Nginx,立即终止所有进程
信号详解
stop
快速关闭 Nginx,立即终止所有进程。
工作原理:
- Master 进程收到 SIGTERM 信号
- Master 进程立即终止所有 Worker 进程
- Master 进程退出
适用场景:
- 紧急情况需要立即停止 Nginx
- Nginx 出现严重错误无法正常关闭
quit
优雅关闭 Nginx,等待当前请求完成。
工作原理:
- Master 进程收到 SIGQUIT 信号
- Master 进程停止接受新连接
- Master 进程通知 Worker 进程开始优雅关闭
- Worker 进程停止接受新请求
- Worker 进程等待当前请求完成
- Worker 进程处理完所有请求后退出
- Master 进程等待所有 Worker 进程退出
- Master 进程退出
适用场景:
- 正常关闭 Nginx
- 更新 Nginx 可执行文件
- 系统维护
reopen
重新打开日志文件,用于日志轮转。
工作原理:
- Master 进程收到 SIGUSR1 信号
- Master 进程通知所有 Worker 进程重新打开日志文件
- Worker 进程关闭当前的日志文件
- Worker 进程打开新的日志文件
- Worker 进程继续处理请求
适用场景:
- 日志轮转后重新打开日志文件
- 不需要重启 Nginx
reload
重新加载配置文件,不中断服务。
工作原理:
- Master 进程收到 SIGHUP 信号
- Master 进程读取新的配置文件
- Master 进程验证新配置文件的语法
- Master 进程启动新的 Worker 进程
- Master 进程向旧的 Worker 进程发送优雅退出信号
- 旧的 Worker 进程停止接受新请求
- 旧的 Worker 进程等待当前请求完成
- 旧的 Worker 进程处理完所有请求后退出
- 新的 Worker 进程处理新请求
适用场景:
- 修改了虚拟主机配置
- 修改了 location 配置
- 修改了代理配置
- 修改了缓存配置
最佳实践
- 使用优雅关闭:避免中断正在处理的请求
- 重新加载配置:不中断服务的情况下更新配置
- 使用信号控制:使用信号控制 Nginx 行为
- 监控进程:定期检查进程状态