# SC002：缺少启动命令

> SC002（缺少启动命令）表示 runCheck 收到的配置中 command 数组为空。本文说明为什么 CLI 显示的是配置错误，以及如何修复。

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

`SC002` 表示 `runCheck()` 收到的配置里没有启动命令。没有可启动的东西，所以运行在创建进程之前就结束了。

| | |
| --- | --- |
| 诊断码 | `SC002` (FAIL) |
| 阶段 | 启动前 |
| CLI 退出码 | 1 |
| 含义 | 配置中没有用于启动服务的命令。 |
| 输出信息 | `No launch command configured` |
| 首先检查 | 把 `command` 设为参数数组，例如 `["node", "server.js"]`。 |

## 为什么只有 `runCheck()` 会出现这个诊断码？

CLI 和 `checkShutdown()` 会先校验输入。它们把空的 `command` 当作配置错误拒绝，在 runner 启动前就退出或抛出异常。`runCheck()` 接收的是已经校验过的 `CheckConfig`，所以手动构造的对象可能触发这个诊断码。

## 如何修复？

调用 `runCheck()` 之前，先用 `parseConfig()` 或 `loadConfig()` 校验输入：

```ts
import { parseConfig, runCheck } from "shutdown-check";

const config = parseConfig({
  command: ["node", "dist/server.js"],
  baseUrl: "http://127.0.0.1:3000",
  readiness: { path: "/health" },
  workload: { path: "/slow", started: { type: "response-headers" } },
});

const result = await runCheck(config);
```

大多数脚本和测试改用 `checkShutdown()` 即可。它一步完成对象校验和检查。

## 如何确认已修复？

打印或查看解析后的配置，确认 `command[0]` 是可执行文件。下一次运行应该产生 `process launched` 事件。如果可执行文件或入口文件不对，结果会变成 SC101，捕获的 stderr 会说明原因。

不要为了消除 TypeScript 报错，把任意对象强制转换成 `CheckConfig`。这样只是去掉了类型错误，并没有加上运行时校验。

## 相关内容

- [Node API](https://shutdown.jscrate.dev/zh/docs/node-api)
- [配置启动命令](https://shutdown.jscrate.dev/zh/docs/configuration#command-cwd-and-env)
- [SC101：服务在就绪前退出](https://shutdown.jscrate.dev/zh/docs/codes/sc101)
