Webサーバ1つに複数のサイトを運用している場合、
「バーチャルホストでどんなWebサービスが動いているか?」「設定変更後の構文は正しいか?」「Webサービス再起動後、ステータスは正常か?」
を確認したい場合は多々あります。
それを解決するためのスクリプトがこちらです。
環境
- Ubuntu 24.04
- Apache 2.4
- バーチャルホストはデフォルトの
/etc/apache2/site-enabled
を踏襲
スクリプト内容
apache2-check.sh
#!/bin/bash
# サイト設定ディレクトリ
SITES_DIR="/etc/apache2/sites-enabled"
# スクリプトを root ユーザーで実行しているかチェック
if [ "$EUID" -ne 0 ]; then
echo "このスクリプトは root 権限で実行する必要があります。"
exit 1
fi
# 1. /etc/apache2/sites-enabled 配下のファイルとURL表示
echo "==== 有効なサイト設定ファイル ===="
if [ -z "$(ls -A "$SITES_DIR")" ]; then
echo "サイト設定が存在しません。"
else
for site in "$SITES_DIR"/*; do
echo "設定ファイル: $(basename "$site")"
# ServerNameとServerAliasを正規化して抽出
entries=$(grep -hi -E "ServerName|ServerAlias" "$site" | sed -E 's/^[[:blank:]]+//;s/[[:blank:]]*#.*//' | awk '{
original_directive = $1
directive = tolower(original_directive)
proper_directive = (directive == "servername") ? "ServerName" :
(directive == "serveralias") ? "ServerAlias" : original_directive
for (i=2; i<=NF; i++) {
domain = tolower($i)
sub(/[;,]*$/, "", domain)
gsub(/^[[:blank:]]+|[[:blank:]]+$/, "", domain)
if (domain) {
printf "%s %s\n", proper_directive, domain
}
}
}' | sort -u)
if [ -z "$entries" ]; then
echo " ※ ServerName/ServerAliasが定義されていません"
else
echo "$entries" | sed 's/^/ /'
fi
echo
done
fi
echo "=================================="
# 2. Apache構文チェック
echo "構文チェック中..."
if ! apachectl configtest; then
echo "構文エラーが検出されました。Apacheを再起動できません。"
exit 1
fi
echo "構文チェック完了: 問題ありません。"
# 3. Apache再起動の確認
read -p "Apacheを再起動しますか? (y/n): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo "Apacheを再起動します..."
if ! systemctl restart apache2; then
echo "Apacheの再起動に失敗しました。"
exit 1
fi
echo "Apacheが正常に再起動されました。"
# 4. Apacheステータス確認
echo "==== Apacheステータス ===="
systemctl status apache2 --no-pager
else
echo "Apacheの再起動はキャンセルされました。"
保存後、
sudo chmod +x apache2-check.sh
として、
sudo bash apache2-check.sh
を実行することで、
- /etc/apache2/site-enabled/ 配下のコンフィグからWebサイト名を表示
- 設定ファイルの構文を確認
- Webサービス再起動の確認
- Webサービス再起動後のステータスの表示
を一括で行うことができます。
使った後
このスクリプトを使うことで、Apacheの設定確認と再起動作業が大幅に効率化されました。
- 設定ファイルの一覧表示: どのサイトが有効になっているか一目で確認できるため、サイト管理がしやすくなりました。
- ServerName/ServerAliasの抽出: 各サイトの設定内容を簡単に確認できるため、設定ミスを防ぐのに役立ちました。
- 構文チェック: 設定変更後の構文エラーチェックを確実に行えるため、Webサイトの停止時間を減らすことができました。
- 再起動手順の簡略化: 再起動時の確認メッセージがあるため、誤操作を防ぐことができます。