Shutdown Check

搜索文档

查找页面或章节

它测试的问题、项目的边界,以及如何获取帮助。

shutdown-check 是一个黑盒测试工具,专门回答一个部署问题:Node.js HTTP 服务收到 SIGTERM 后,能否处理完进行中的请求并干净地退出?

为什么要做这个项目?

关闭处理函数在代码评审时看起来没问题,在真实进程中却仍可能失败。启动命令可能多套了一层包装进程,框架处理 socket 的方式可能与预期不同,某个请求可能仍依赖正在关闭的资源,某个定时器也可能让 Node.js 一直无法退出。

单元测试很有价值,但它们通常直接调用处理函数,并 mock 掉部署时真正会出问题的部分。shutdown-check 会运行真实的命令,建立真实的 HTTP 连接,发送操作系统信号,并等待进程真正退出。

shutdown-check 是什么

  • 一个 CLI 和带类型的 Node.js API。
  • 针对本地 HTTP/1 服务的测试。
  • 基于真实进程和真实信号的测试。
  • 检查进行中的响应、可选的流量排空、进程退出和端口关闭。
  • 用于 macOS 和 Linux 上的本地开发和 CI。

shutdown-check 不是什么

  • 它不是关闭处理库。
  • 它不会修改你的应用。
  • 它不绑定 Express、Fastify、NestJS 或其他任何框架。
  • 它不会运行 Kubernetes 集群或负载均衡器。
  • 它不检查数据库、队列、WebSocket 或 HTTP/2 会话。
  • 它不支持 Windows 原生的信号行为。

对比页面介绍了它如何与关闭库、单元测试、脚本和预发布环境测试配合使用。

设计原则

测试真实的边界

测试观察的输入和输出,正是部署平台所用的那些:命令、端口、HTTP、信号和退出状态。

不制造虚假的通过

发送 SIGTERM 前,必须先证明有工作正在进行。启动前端口必须空闲,退出后端口必须已关闭。可选检查只在它要测试的状态仍然存在时才会执行。

失败要能指导修复

每种已定义的失败都有稳定的 SC 码、一条消息、一条时间线,以及一个列出原因和修复方法的页面。出于同样的原因,CLI 会保留服务输出的最后一部分。

配置保持明确

配置文件写明命令、路由、预期响应、截止时间和排空行为。工具不会替你猜测服务应该使用哪个接口或哪个退出码才算正确。

项目范围

当前版本专注于:

  • SIGTERM
  • 本地明文 HTTP/1
  • Node.js 22 或更高版本
  • macOS 和 Linux
  • ESM 和 CommonJS
  • 文本、JSON 和 JUnit 输出

如果要测试超出这个范围的协议或环境,请先阅读兼容性与限制,再设计测试。

维护者与许可证

shutdown-check 由 Sohail Khan 维护,以 MIT 许可证发布。源码、issue 记录和版本发布都公开进行。

在遵守许可证条款的前提下,你可以使用、修改和分发本项目。完整条款见包或仓库中的 LICENSE 文件。

报告问题

提交 issue 之前:

  1. 运行最新版本。
  2. 阅读对应诊断码的页面。
  3. 查看故障排查。
  4. 尽可能把问题缩小到一个小型服务器和配置。

请提供:

  • shutdown-check 版本
  • Node.js 版本
  • 操作系统
  • 你运行的命令
  • 去除敏感信息后的配置
  • 完整的结果码、消息和时间线
  • 捕获到的相关 stdout 和 stderr
  • 可复现的仓库或小型服务器(如果有)

切勿包含密码、token、连接字符串、私有 URL、客户数据或其他敏感信息,请用清晰的占位符代替。