④logrotate設定追加
冒頭に書いたホスティング環境の仕様では、各バーチャルホストのログは/home/logs/ホスト名/以下に格納されるようになっていました。そのため、ログローテーション設定ファイル/etc/logrotate.d/httpdに、設定を加える必要があります。一撃シェルスクリプトでは、次の部分でそれを行っています。
# Logrotate Configure mkdir -p /etc/logrotate.d/BACKUP cp -p /etc/logrotate.d/httpd /etc/logrotate.d/BACKUP/httpd.orig sed -i "s/\/var\/log\/httpd\/\*log/\/var\/log\/httpd\/\*log \ \/home\/logs\/\*\/access_log \/home\/logs\/\*\/error_log/g" /etc/logrotate.d/httpd
⑤Apacheの再起動
以上でApacheの設定はおしまいです。Apacheを再起動するとともに、OSの再起動後に自動起動するようにします。
# Apache Start service httpd start chkconfig httpd on
3. サーバー運用ツール「VHMAINTE」の生成
今回の一撃シェルスクリプトには、Apache(httpd)とPHPのインストールと設定の次に、構築したサーバーの運用に使用するコマンドラインツール「VHMAINTE
」(/root/binディレクトリに配置)を生成する処理があります。
VHMAINTE
コマンドに実装する機能は次の2つです。
- バーチャルホストの作成
- バーチャルホストの削除
はじめに、VHMAINTE
コマンドの格納先となるディレクトリを作成します。
# For VHMAINTE Directory Create [ ! -d ${HOME}/bin ] && mkdir -p ${HOME}/bin [ ! -d ${HOME}/etc ] && mkdir -p ${HOME}/etc
ヒアドキュメントでVHMAINTEコマンドを生成
続いて、VHMAINTE
コマンドをヒアドキュメントで生成します。Bashのヒアドキュメントの文法は次のとおりです。
cat << _EOL_ >> /path/to/output #!/bin/bash …… _EOL_
または、
cat << _EOL_ | tee /path/to/output #!/bin/bash …… _EOL_
やっかいなのが、コマンドの処理を記述するために多用を余儀なくされる変数です。ヒアドキュメントの出力に工夫をこらさないと、変数が展開されて出力されてしまいます(あえて変数展開させることもありますが)。さらに、長いソースコードでは特殊記号のエスケープがバグの温床(エスケープ忘れ)になりがちです。
特殊記号のエスケープを避け、バグを発生させないためには、ヒアドキュメントを次のようにして出力します。
cat << '_EOL_' | tee /path/to/output #!/bin/bash ETCDIR=${HOME}/etc VHLIST=${ETCDIR}/VHLIST …… _EOL_
このように、区切り文字をシングルクォートで囲ってあげることで、ヒアドキュメントの中で特殊記号のエスケープを行う手間から解放されます。
なお、このヒアドキュメントは入れ子になっています。いきなり複雑なシェルスクリプトですみません……。また、入れ子の“子”になっているヒアドキュメントには、変数をあえて展開させる箇所もあります。
運用ツール全体で使用する変数の定義
運用ツールを生成するヒアドキュメントの最初の部分では、運用ツール全体で使用する変数を定義しています。最後の1行では、バーチャルホストの元となるディレクトリ(/home/vhosts)がなければ作成しています。
cat << '_EOL_' | tee ${HOME}/bin/VHMAINTE > /dev/null #!/bin/bash ETCDIR=${HOME}/etc VHLIST=${ETCDIR}/VHLIST VHDIR=/home/vhosts DATE=$(date +%Y%m%d) [ ! -d ${VHDIR} ] && mkdir -p ${VHDIR}
ここで定義している変数に格納される値は次のとおりです。
変数名 | 格納される値 |
---|---|
ETCDIR | ホームディレクトリ直下のetcディレクトリへのパス |
VHLIST | /root/etc/VHLIST(運用ツールが読み込む設定ファイル) |
VHDIR | バーチャルホストの元となるディレクトリ |
DATE | 現在の年月日。バックアップファイル名などに使う |
バーチャルホストの作成/削除の分岐
VHMAINTE
コマンドは、引数にcreate
を与えたときにはバーチャルホストを生成し、delete
を与えたときにはバーチャルホストを削除するようにします。この処理の分岐は、次のようにcase
文で行います。
case "$1" in [cC][rR][eE][aA][tT][eE]) ・・・(略) ;; [dD][eE][lL][eE][tT][eE]) ・・・(略) ;; esac _EOL_