【nginx】服务的信号控制
目录
- 1. 说明
- 2. 常用信号及作用
- 3. 信号控制的具体操作
- 3.1 获取 Nginx 主进程 PID
- 3.2 发送信号
- 4. 应用场景
- 4.1 重新加载配置文件
- 4.2 日志切割
- 5. 平滑升级 Nginx
- 6. 注意事项
1. 说明
- 1.Nginx 的信号控制是其管理服务的重要机制,通过向主进程发送特定信号,可以实现对 Nginx 的平滑重启、重新加载配置、关闭服务等操作,而无需停止服务或中断用户请求。
2. 常用信号及作用
信号 | 发送方式 | 作用 |
---|---|---|
TERM 或 INT | kill -TERM <PID> 或 kill -INT <PID> | 立即关闭 Nginx 服务,所有工作进程和主进程将直接退出,未完成的请求会被中断。 |
QUIT | kill -QUIT <PID> | 优雅关闭 Nginx 服务,主进程会等待所有工作进程完成当前请求后再退出。 |
HUP | kill -HUP <PID> | 重新加载配置文件,主进程会启动新的工作进程,并平滑关闭旧的工作进程。 |
USR1 | kill -USR1 <PID> | 重新打开日志文件,用于日志切割,不会中断服务。 |
USR2 | kill -USR2 <PID> | 平滑升级 Nginx,启动新的主进程和新的工作进程,旧进程继续处理剩余请求。 |
WINCH | kill -WINCH <PID> | 优雅关闭工作进程,通常与 USR2 配合使用,用于平滑升级时关闭旧工作进程。 |
3. 信号控制的具体操作
3.1 获取 Nginx 主进程 PID
- 1.Nginx 主进程的 PID 通常存储在配置文件中指定的 PID 文件中,默认路径为 /usr/local/nginx/logs/nginx.pid 或 /var/run/nginx.pid。
- 2.可以通过以下命令获取:cat /usr/local/nginx/logs/nginx.pid
3.2 发送信号
- 1.使用 kill 命令向主进程发送信号。
- 2.重新加载配置文件:kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
- 3.优雅关闭服务:kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid)
- 4.重新打开日志文件(用于日志切割):kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
4. 应用场景
4.1 重新加载配置文件
- 1.当修改了 Nginx 配置文件(如 nginx.conf)后,无需停止服务即可使新配置生效
- 2.kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)
- 3.nginx -s reload
4.2 日志切割
- 1.为了防止日志文件过大,可以定期切割日志。
- 2.重命名当前日志文件:mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access.log.old
- 3.向 Nginx 主进程发送 USR1 信号,重新打开日志文件:kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
- 4.压缩或归档旧日志文件:gzip /usr/local/nginx/logs/access.log.old
5. 平滑升级 Nginx
- 1.当需要升级 Nginx 时,可以使用 USR2 和 WINCH 信号实现平滑升级:
- 2.启动新的 Nginx 二进制文件:/path/to/new/nginx -c /path/to/nginx.conf
- 3.新进程会作为主进程运行,旧主进程的 PID 会被重命名为 .oldbin。
- 4.向旧主进程发送 USR2 信号,启动新的工作进程:kill -USR2 $(cat /var/run/nginx.pid)
- 5.向旧主进程发送 WINCH 信号,优雅关闭旧工作进程:kill -WINCH $(cat /var/run/nginx.pid.oldbin)
- 6.确认新进程正常运行后,关闭旧主进程:kill -QUIT $(cat /var/run/nginx.pid.oldbin)
6. 注意事项
- 1.信号发送对象:始终向 Nginx 主进程发送信号,而不是工作进程。
- 2.日志文件权限:确保 Nginx 有权限写入日志文件,否则 USR1 信号可能无效。
- 3.配置文件语法检查:在重新加载配置文件前,建议先检查语法是否正确:nginx -t
- 4.平滑升级风险:在升级过程中,确保新旧版本的配置文件兼容,避免服务中断。