2026年7月24日
2026年7月24日
Apacheを再起動・リロードする方法
はじめに
Apacheの設定を変更したのに反映されない・systemctl restart apache2がエラーになる・本番環境でApacheを再起動したら一時的にサイトがダウンしてしまったといった問題は、restartとreloadの違いを理解することで解決できます。
症状・原因
- 設定ファイルを変更したのに
systemctl restartが失敗する(構文エラーが残っている) restartを実行したら接続中のユーザーが切断されてしまったreload後も設定が反映されない(reloadできないモジュールがある)- Apacheのプロセスが応答しなくなり
systemctlコマンドがタイムアウトする
解決手順
ステップ1:Apacheの状態を確認する
# ✅ Apache の起動状態を確認
sudo systemctl status apache2
# または CentOS/RHEL
sudo systemctl status httpd
# ✅ Apache のプロセス確認
ps aux | grep apache2
# → www-data 1234 0.0 ... apache2 -k start ← ワーカープロセス
# ✅ ポートのリッスン状態を確認
sudo ss -tlnp | grep ':80\|:443'
# → LISTEN 0 511 0.0.0.0:80 ... users:(("apache2",...))
# ✅ エラーログで起動失敗の原因を確認
sudo journalctl -u apache2 -n 50 --no-pager
sudo tail -50 /var/log/apache2/error.log
ステップ2:restart と reload の違いを理解する
# ✅ reload(設定再読込・推奨)
# 既存のHTTPコネクションを維持したまま設定を再読込
# ダウンタイムなし
sudo systemctl reload apache2
# または
sudo apache2ctl graceful
# ✅ restart(完全再起動)
# 全プロセスを終了して再起動・既存接続が切断される
# 構文チェックしてから実行
sudo apache2ctl -t && sudo systemctl restart apache2
# ✅ graceful restart(安全な再起動)
# 既存接続の処理完了後に新しい設定で再起動
sudo apache2ctl graceful
# ✅ graceful-stop(安全な停止)
sudo apache2ctl graceful-stop # 新規接続拒否して既存処理完了後に停止
# ✅ OS起動時に自動起動を有効化
sudo systemctl enable apache2
sudo systemctl is-enabled apache2 # → enabled
ステップ3:再起動が失敗する場合の対処
# ✅ 構文エラーを修正してから再起動
sudo apache2ctl -t
# → AH00526: Syntax error ← エラー内容と行番号が表示される
# エラー箇所を修正してから再チェック
sudo apache2ctl -t && sudo systemctl restart apache2
# ✅ ポートが既に使用中の場合
sudo ss -tlnp | grep ':80'
# → 他プロセスが80番を使用していないか確認
# ✅ PID ファイルが残っている場合
sudo rm /var/run/apache2/apache2.pid
sudo systemctl start apache2
# ✅ プロセスが応答しない場合(ゾンビプロセス)
sudo pkill -9 apache2
sudo systemctl start apache2
ステップ4:設定変更を安全に本番反映する
# ✅ 本番環境でのゼロダウンタイム設定変更フロー
# 1. 構文チェック(必須)
sudo apache2ctl -t
# 2. graceful reload で設定反映(ダウンタイムなし)
sudo systemctl reload apache2
# 3. 反映されたか確認
curl -sI http://localhost | head -5
# → Server: Apache/2.4.x
# ✅ 設定変更後のスモークテスト
# レスポンスコードが200か確認
curl -o /dev/null -s -w "%{http_code}" http://example.com
# → 200
# ✅ ログでエラーが出ていないか確認
sudo tail -f /var/log/apache2/error.log
ステップ5:Apacheの自動再起動を設定する
# ✅ systemd でクラッシュ時の自動再起動を設定
sudo mkdir -p /etc/systemd/system/apache2.service.d/
sudo tee /etc/systemd/system/apache2.service.d/override.conf << 'EOF'
[Service]
Restart=always
RestartSec=5
StartLimitInterval=60
StartLimitBurst=3
EOF
# ✅ 設定を反映
sudo systemctl daemon-reload
sudo systemctl restart apache2
# ✅ 自動再起動が有効になっているか確認
sudo systemctl show apache2 | grep -i restart
# ✅ ヘルスチェックで自動検知・再起動
# crontab に追加
# */5 * * * * curl -sf http://localhost/ || systemctl restart apache2
注意事項
- 本番環境では
systemctl restartよりもsystemctl reloadまたはapache2ctl gracefulを使ってください。restartは既存のHTTPSセッションも含む全接続を切断します。gracefulは処理中のリクエストが完了するまで待ってから設定を反映します reloadではSSL証明書の変更など一部の設定が反映されない場合があります。その場合はapache2ctl gracefulを使用してください
まとめ
Apacheの再起動・リロードは①systemctl status apache2で起動状態確認・ss -tlnpでポート確認・エラーログで原因特定、②reload(設定再読込・ダウンタイムなし)とrestart(完全再起動・接続切断)の違いを理解・gracefulで安全な操作、③構文エラーをapache2ctl -tで修正してから再起動・PIDファイル残存・ゾンビプロセスへの対処、④本番ではapache2ctl -t→systemctl reloadのフロー・スモークテストでレスポンス確認・ログ監視、⑤systemdのRestart=alwaysで自動再起動・cronヘルスチェックで自動検知の手順で対応します。