④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_
