apache优雅重启(graceful)通过主进程重载配置并通知worker完成当前请求后退出,新worker立即启动承接新请求,从而保持keep-alive、websocket等长连接不中断;需按序执行configtest、graceful、日志验证三步。
apache 使用 apachectl graceful 实现优雅重启,核心是让旧工作进程处理完当前请求再退出,新进程用更新后的配置立即承接新请求,从而保持长连接(如 http/1.1 keep-alive、websocket、sse)不被 rst 或中断。
为什么 graceful 能保住长连接
它不是杀掉所有子进程再拉起新服务,而是:
- 主进程收到
USR1信号后,重新加载配置并打开新日志文件 - 向正在运行的 worker 进程发送“完成当前请求后退出”的指令
- 空闲或刚完成请求的 worker 会立即退出,主进程随即派生新 worker
- 已有 TCP 连接(包括 keep-alive 空闲连接)仍由原 worker 维持,直到超时或下一次请求结束
正确执行 graceful 的三步操作
务必按顺序操作,漏掉任一环节都可能引发中断或失败:
-
先校验配置:运行
sudo apachectl configtest或sudo apachectl -t,确保返回Syntax OK -
再触发优雅重启:运行
sudo apachectl graceful(推荐);也可用sudo systemctl reload httpd,但需确认其ExecReload=指向graceful而非restart -
观察日志确认生效:查看错误日志(如
/var/log/httpd/error_log),应出现类似Graceful restart requested, doing restart和Apache/2.x.x configured -- resuming normal operations的记录
哪些配置变更支持 graceful 生效
并非所有修改都能热生效,以下常见项可安全使用 graceful:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 虚拟主机(
<virtualhost></virtualhost>)增删改,包括 ServerName、DocumentRoot、SSL 配置 - 模块级指令,如
DirectoryIndex、AllowOverride、Header set - 日志路径与格式(
CustomLog、ErrorLog)—— graceful 会自动 reopen 日志文件
以下变更不支持 graceful,必须硬重启(apachectl restart):
- MPM 模块切换(如从 prefork 改为 event)
- 加载或卸载核心模块(如
LoadModule增减) - 修改
ServerRoot、PidFile、Listen端口等主进程级参数
验证长连接是否真没断
可在重启前后用 curl 检查 keep-alive 行为:
- 发起带 keep-alive 的请求:
curl -v --http1.1 -H "Connection: keep-alive" http://your-site/ - 观察响应头是否有
Connection: keep-alive,且复用同一 TCP 连接发多次请求 - 在
graceful执行期间持续请求,确认无 502、连接拒绝或重连现象










