关于 graceful-shutdown
用于实现有序进程关闭的软件开发技能,帮助团队在部署、重启和长时间运行的任务中处理完请求、关闭连接并释放资源。
主要功能
- 01处理 SIGTERM 和 SIGINT 信号
- 02等待正在处理的请求完成
- 03设置关闭超时
- 04清理数据库连接
- 05支持服务器和工作进程关闭
适用场景
- 01滚动更新期间关闭服务
- 02服务器重启前排空请求
- 03清理数据库连接池
- 04安全停止后台工作进程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill graceful-shutdown安装后在 Claude Code 中输入/graceful-shutdown确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/database-connection-pool-shutdown.mdexpressjs-graceful-shutdown.mdkubernetes-aware-shutdown.mdpm2-graceful-shutdown.mdpythonflask-graceful-shutdown.mdworker-process-shutdown.mdscripts/validate-config.shtemplates/config-starter.yaml详细介绍
平滑关闭
目录
概述
实现恰当的关闭流程,确保进程终止前所有请求均已完成、连接均已关闭,且资源均已释放。
适用场景
- Kubernetes/Docker 部署
- 滚动更新和部署
- 服务器重启
- 负载均衡器排空期间
- 零停机部署
- 进程管理器(PM2、systemd)
- 长时间运行的后台任务
- 数据库连接清理
快速开始
最小可运行示例:
import express from "express";
import http from "http";
class GracefulShutdownServer {
private app: express.Application;
private server: http.Server;
private isShuttingDown = false;
private activeConnections = new Set<any>();
private shutdownTimeout = 30000; // 30 seconds
constructor() {
this.app = express();
this.server = http.createServer(this.app);
this.setupMiddleware();
this.setupRoutes();
this.setupShutdownHandlers();
}
private setupMiddleware(): void {
// Track active connections
this.app.use((req, res, next) => {
if (this.isShuttingDown) {
res.set("Connection", "close");
return res.status(503).json({
error: "Server is shutting down",
// ... (see reference guides for full implementation)
参考指南
references/ 目录中的详细实现:
| 指南 | 内容 |
|---|---|
| Express.js 平滑关闭 | Express.js 平滑关闭 |
| 适配 Kubernetes 的关闭 | 适配 Kubernetes 的关闭 |
| 工作进程关闭 | 工作进程关闭 |
| 数据库连接池关闭 | 数据库连接池关闭 |
| PM2 平滑关闭 | PM2 平滑关闭 |
| Python/Flask 平滑关闭 | Python/Flask 平滑关闭 |
最佳实践
✅ 应该
- 处理 SIGTERM 和 SIGINT 信号
- 立即停止接受新请求
- 等待正在处理的请求完成
- 设置合理的关闭超时时间
- 正确关闭数据库连接
- 刷新日志和指标
- 在关闭期间使健康检查失败
- 测试关闭流程
- 记录关闭进度
- 在容器中使用平滑关闭
❌ 不应该
- 忽略关闭信号
- 不进行清理就强制终止进程
- 设置不合理的长超时时间
- 跳过资源清理
- 忘记关闭连接
- 无限期阻塞关闭
评论
支持 Markdown