mcpField
G
graceful-shutdown

graceful-shutdown

github.com/aj-geddes開発373436 回インストール34 週間前に更新
リポジトリ

graceful-shutdown について

プロセスを適切に終了するためのソフトウェア開発スキルです。デプロイ、再起動、長時間実行ジョブの際に、処理中のリクエストを完了し、接続を閉じてリソースを解放します。

主な機能

  1. 01SIGTERM と 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 シグナルを処理する
  • 新しいリクエストの受け付けを直ちに停止する
  • 処理中のリクエストが完了するまで待機する
  • 適切なシャットダウンタイムアウトを設定する
  • データベース接続を適切に閉じる
  • ログとメトリクスをフラッシュする
  • シャットダウン中はヘルスチェックを失敗させる
  • シャットダウン手順をテストする
  • シャットダウンの進行状況をログに記録する
  • コンテナではグレースフルシャットダウンを使用する
❌ 避けること
  • シャットダウンシグナルを無視する
  • クリーンアップせずにプロセスを強制終了する
  • 不合理に長いタイムアウトを設定する
  • リソースのクリーンアップを省略する
  • 接続を閉じ忘れる
  • シャットダウンを無期限にブロックする

コメント