cronでアクセスログを処理してメール送信する

レンタルサーバー上でAWStatsをインストールしてログを取る話です。cronで定期的にスクリプトを実行します。

動作前提条件

さくらインターネットのレンタルサーバーでAWStatsというアクセス解析ソフトをインストールします。これを毎晩定時に動かすというシェルスクリプトです。ちなみにさくらのレンタルサーバーにはWebalizerというアクセス解析サービスが標準で付いています。



スクリプトの流れ

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
perl /home/your_account/www/awstats/cgi-bin/awstats.pl -config=your_domain -update
echo "The analysis of the log file has completed." > $HOME/tmp/temp.txt
echo "^D" >> $HOME/tmp/temp.txt
mail -s "The report form CRON." yourmail_account@yourmail_domain < $HOME/tmp/temp.txt
rm $HOME/tmp/temp.txt

AWStatsはperlのスクリプトです。 これを走らせて、その旨メール通知するシェルスクリプトになります。

    3行目:AWStatsを起動します。”your_account”の部分には実際のパスを書き込みます。
  • 4,5行目:メールメッセージ本文を一時ファイルに書き込みます。echo “^D”の部分はコントロールコードのDを入力します。
  • 6行目:mailコマンドにファイルの内容をリダイレクトして送信しています。メールアドレスには実際の送信先を書いてください。

コントロールコードの入力方法はそれぞれのエディタのマニュアルを参照してください。ちなみにvimの場合はCtrl-v + dで入力できます。

定時に実行

シェルスクリプトを保存したらchmod +x awstats.shで実行可能に設定したうえでcrontab -eでcronの設定をおこないます。さくらのレンタルサーバーは毎晩12時数分過ぎにアクセスログを保存するので、下記の例では1時ちょうどに実行するように設定しています。

## AWStats
0 1 * * * /home/your_account/awstats.sh

BASIC認証の設定

これで期待する動作はしますが、urlがわかっていれば誰でもデータを見ることができてしまいますので、BASIC認証を設定して保護しておきます。htpasswdでユーザーIDとパスワードを設定し、AWStatsログデータ表示urlのディレクトリ以下に.htaccessファイルを設置します。

AuthUserFile  /home/your_account/.htpasswd
AuthGroupFile /dev/null
AuthName  "Type your password"
AuthType  Basic
require   valid-user