首页/系统/Linux 运维命令速查/场景:用信号做配置热加载
进程与作业69 条

场景:用信号做配置热加载

改完配置不想重启进程:找出应用支持的重载信号(HUP/QUIT/USR1),发信号后验证配置生效,业务无损。

Linux 运维命令速查系统更新于 2026-10-13

用信号做热加载

多数服务支持在不中断业务的前提下重新读取配置:做法是给它发一个约定的信号,进程收到后重新解析配置文件、平滑替换工作进程。不同应用约定的信号不同,常见的是 HUP、USR1、USR2 与 QUIT。正确姿势是先做配置语法校验,再发信号,最后验证新配置确实生效,而不是盲发。

基本信息

典型场景改完配置不想重启进程,避免连接中断与启动耗时
通用流程配置校验 → 发信号或调用服务的 reload → 验证生效
systemd 环境优先 systemctl reload,它封装了正确信号与前置校验
风险点发错信号可能直接终止进程,也可能让配置只生效一半

典型使用场景

  • 调整负载均衡后端列表后平滑生效,不丢在途请求
  • 修改日志级别或日志路径,让进程重新打开日志文件
  • 轮转日志后通知进程切换写入新的文件句柄
  • 灰度发布时先在一台机器上验证配置再推其余节点
  • 二进制热升级场景由旧进程移交监听套接字给新进程

通用流程

通用流程
nginx -t                                       # 1. 配置语法校验(各应用命令不同)
kill -HUP $(cat /run/nginx.pid)                # 2. 发重载信号(示例:nginx 用 HUP)
ps -o etime= -p $(cat /run/nginx.pid)          # 3. 进程没重启,运行时长没归零
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1/health   # 4. 业务探活
sudo systemctl reload nginx                    # 有 systemd 时优先用它
journalctl -u nginx -n 30 --no-pager           # 5. 看日志确认没有解析报错

常用信号读法

信号常见语义注意
HUP重读配置(多数服务约定)有些服务收到 HUP 会直接退出,先查文档
USR1因应用而异:重开日志、切换状态输出等同一信号在不同应用语义完全不同
USR2升级二进制或重新执行自身以 nginx 类应用为例,用于平滑升级
QUIT优雅退出会停止服务,别当成重载
TERM请求终止默认的停止信号,不是重载
systemd 环境优先用 systemctl reload:它把正确信号、前置校验与失败处理都封装好了,比手工查表发信号更不容易出错。
验证重载成功不能只看命令返回,要同时确认进程运行时长没归零(说明没重启)、日志没有解析报错、健康检查正常。

易错点

  • 发错信号可能直接把进程干掉,动手前先确认该版本支持的信号语义
  • 运行时长归零说明进程被重启过而不是重载,验证时要区分这两种结果
  • 长连接场景下重载只影响新连接,旧连接仍按老配置运行,别以为配置立即全局生效
  • 没有配置校验的应用在配置写错时会保持旧配置或直接退出,先在一台机器上验证再推全量

数据来源与参考

  • man 7 signal(Linux man-pages 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌