\n
\n本番運用中のWebサーバーで
systemctl stop httpd を実行すると、処理中のリクエストが途中で切断されてしまいます。ダウンロード中のユーザーや決済処理中の顧客に影響を与えないためには、接続が終わるのを待ってから停止する仕組みが必要です。\n
\nこの記事では、Apache HTTP Serverの
graceful-stop を使って、通信中のクライアントに影響を与えずhttpdサービスを停止する方法を解説します。\n
\n
\n\n・
graceful-stop は通信中のリクエストが完了するのを待ってから停止する\n・
apachectl graceful-stop または httpd -k graceful-stop で実行できる\n・
systemctl stop httpd は即時停止で既存接続を切断する\n・RHEL9系は
apachectl、Ubuntu LTSは apache2ctl とコマンド名が異なる\n・待ち時間の上限は
GracefulShutdownTimeout ディレクティブで設定できる\n
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
graceful-stopとは
graceful-stop は、Apache HTTP Serverを「丁寧に」停止するための操作です。実行すると親プロセスは新規リクエストの受付をやめ、現在処理中の子プロセスがすべての接続を完了するのを待ってから終了します。ダウンロード途中で切断されたり、決済処理が中断されたりしないため、本番環境のサービス停止やメンテナンス切り替えで重宝します。
反対に
systemctl stop httpd は即時停止で、実行中のリクエストがあっても強制的に切断します。RHEL9系でgraceful-stopを実行する
AlmaLinux9/Rocky Linux9/RHEL9では、apachectl を使って次のように実行します。# apachectl graceful-stop を実行する # apachectl graceful-stop # または httpd バイナリを直接指定する # httpd -k graceful-stop
ps や systemctl status httpd で確認します。# 停止の進行状況を確認する # ps -ef | grep httpd
Ubuntu LTSでの実行方法
Ubuntu 22.04/24.04 LTSではApacheのパッケージ名がapache2 で、コマンドも apache2ctl になります。$ sudo apache2ctl graceful-stop
systemctl stop apache2 と対になる操作として使い分けます。systemctlとgraceful-stopの違い
両者の動作の違いをまとめます。| 操作 | 既存接続 | 用途 |
|---|---|---|
systemctl stop httpd |
即時切断 | 緊急停止・開発環境 |
apachectl graceful-stop |
完了を待つ | 本番の計画停止 |
apachectl graceful |
完了を待って再読込 | 設定変更の反映 |
ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop が定義されているディストリビューションもあります。その場合は systemctl stop httpd 自体がgraceful-stop相当になります。以下のコマンドで確認できます。# ExecStop の設定を確認する # systemctl cat httpd | grep ExecStop ExecStop=/usr/sbin/httpd -k graceful-stop
graceful-stop実行時の注意点
graceful-stopは便利ですが、いくつか注意が必要です。・長時間接続(WebSocketや大容量ダウンロード)があると、停止まで数分以上待たされることがある
・停止途中に新規リクエストは受け付けないが、ポートは解放されていないため別プロセスの起動とは競合する
・接続がなかなか終わらない場合は、最終的に
systemctl kill httpd で強制停止する判断も必要待ち時間の上限を決めておきたい場合は、
GracefulShutdownTimeout ディレクティブを httpd.conf に設定します(単位は秒)。# 最大60秒待ってから強制終了する設定 GracefulShutdownTimeout 60
まとめ
| やりたいこと | コマンド |
|---|---|
| 接続完了を待って停止する(RHEL9系) | apachectl graceful-stop |
| 接続完了を待って停止する(Ubuntu) | sudo apache2ctl graceful-stop |
| 即時停止する | systemctl stop httpd |
| 停止の進行状況を確認する | ps -ef | grep httpd |
| ExecStop設定を確認する | systemctl cat httpd | grep ExecStop |
| 待ち時間の上限を設定する | httpd.conf に GracefulShutdownTimeout 60 |
Apacheの安全な停止だけでなく、本番サーバーを正しく管理するための「型」を身につけたいですか?
graceful-stopを使いこなすことは、本番環境でのサービス影響を最小化するための重要なスキルです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Apacheの設定ファイルを構文チェックする方法|httpd -tとapachectl configtestで文法エラーを検出
- 前のページへ:httpdサービスを起動・停止・再起動する方法|systemctlとinit.dの両対応
- この記事の属するカテゴリ:Linuxtips・Webサーバー管理・サーバー管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます