mcpField
G
graceful-shutdown

graceful-shutdown

github.com/aj-geddes开发373436 次安装34 周前更新
代码仓库

关于 graceful-shutdown

用于实现有序进程关闭的软件开发技能,帮助团队在部署、重启和长时间运行的任务中处理完请求、关闭连接并释放资源。

主要功能

  1. 01处理 SIGTERM 和 SIGINT 信号
  2. 02等待正在处理的请求完成
  3. 03设置关闭超时
  4. 04清理数据库连接
  5. 05支持服务器和工作进程关闭

适用场景

  1. 01滚动更新期间关闭服务
  2. 02服务器重启前排空请求
  3. 03清理数据库连接池
  4. 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.md
expressjs-graceful-shutdown.md
kubernetes-aware-shutdown.md
pm2-graceful-shutdown.md
pythonflask-graceful-shutdown.md
worker-process-shutdown.md
scripts/
validate-config.sh
templates/
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