# 关于

> 关于 shutdown-check：为什么做这个项目，它是什么、不是什么，由谁维护，采用 MIT 许可证，以及如何提交一个有用且不含敏感信息的 issue。

Source: https://shutdown.jscrate.dev/zh/docs/about
Last updated: 2026-09-23

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 原生的信号行为。

[对比页面](https://shutdown.jscrate.dev/zh/docs/comparison)介绍了它如何与关闭库、单元测试、脚本和预发布环境测试配合使用。

## 设计原则

### 测试真实的边界

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

### 不制造虚假的通过

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

### 失败要能指导修复

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

### 配置保持明确

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

## 项目范围

当前版本专注于：

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

如果要测试超出这个范围的协议或环境，请先阅读[兼容性与限制](https://shutdown.jscrate.dev/zh/docs/compatibility)，再设计测试。

## 维护者与许可证

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

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

## 报告问题

提交 issue 之前：

1. 运行最新版本。
2. 阅读对应诊断码的页面。
3. 查看[故障排查](https://shutdown.jscrate.dev/zh/docs/troubleshooting)。
4. 尽可能把问题缩小到一个小型服务器和配置。

请提供：

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

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

## 相关内容

- [快速开始](https://shutdown.jscrate.dev/zh/docs/quick-start)
- [shutdown-check 的工作原理](https://shutdown.jscrate.dev/zh/docs/how-it-works)
- [兼容性与限制](https://shutdown.jscrate.dev/zh/docs/compatibility)
- [方案对比](https://shutdown.jscrate.dev/zh/docs/comparison)
- [版本发布](https://shutdown.jscrate.dev/zh/docs/releases)
