browscap のデータファイルを自動的に更新する
SPECIAL
browscap のデータファイルを自動更新する
訪問者の Web ブラウザーの種類を判定する方法として browscap を用いてブラウザーの判定を可能にする というお話を以前にしたことがありました。
この方法で CentOS 5.6 上で稼働している Apache でブラウザーの判定を行っていたのですけど、ブラウザーのバージョンアップや携帯電話やスマートフォンの新機種が登場すると、古い browscap のデータではそれらを正しく判定できなくなってしまうことがありました。
そのため、最新の browscap データファイルが出ていないかをチェックして、必要であれば差し替えるといった作業が必要になってくるのですけど、それもなかなか面倒で、忘れがちになってしまいます。
そこで、以前に DNS のルートヒントを自動的に更新する でやったのと同じ要領で、browscap のデータファイルも自動的にダウンロードして更新するようにしてみることにしました。
browscap データファイルが更新されたかどうかを監視するスクリプトを Cron で定期的に実行して、ファイルが更新されていたら、それをダウンロードして差し替えるスクリプトを作成してみました。差し替えの際には、ダウンロードされた新しい browscap データファイルと、以前の browscap との差分データが、テキストファイルで添付されるようにしてみています。
そんな感じで用意した browscap 自動更新スクリプトは、以下の内容になりました。これを今回は "/etc/browscap/update-browscap.sh" という名前で、サーバーに保存しておきます。
スクリプトの動作は、冒頭に定義されている変数で、環境に合わせて値を調整します。
NOTIFICATE_ADDRESS | browscap データファイルの自動更新を行った際や、自動更新の処理中にエラーが発生した場合に通知するメールアドレスです。 mail コマンドでメールを送信します。 |
---|---|
NOTIFICATE_SENDER | 通知メールの送信元として指定されるアドレスです。 |
BROWSCAP_URL | ダウンロードしたい browscap データファイルへの URL です。 wget コマンドでダウンロードを試みます。 |
BROWSCAP_FILENAME | 運用中のサーバーに保存されている browscap ファイルのファイル名です。 ファイル名および拡張子名のみで指定し、ディレクトリ名は含みません。 |
BROWSCAP_DATADIR | 運用中のサーバーで、browscap データファイルを格納しているディレクトリ名です。 ディレクトリ名の末尾には "/" は記載せずに指定します。 |
RELOADCMD | browscap データファイルを差し替えた後には Web サーバーの設定再読み込みが必要なため、ここで Web サーバーに設定を再読み込みさせるためのコマンドを設定します。 |
これらの値を環境に合わせて調整したら、このスクリプトに次のようにして実行権限を与えます。
chmod +x /etc/browscap/update-browscap.sh
後はこれを実行すれば、browscap データファイルをサーバーからダウンロードして、それが運用サーバーに保存されているものと異なるようであれば、差し替える処理を行ってくれます。
この自動更新スクリプトを定期的に自動実行させたい場合には、CentOS 5.6 であれば、次のようにして Cron に登録してあげるます。
ln -s /etc/browscap/update-browscap.sh /etc/cron.weekly/
例えばこのようにすることで、CentOS 5.6 であれば、毎週日曜日の午前 3 時 49 分に、登録した browscap 自動更新スクリプトが実行されるようになりました。自動実行のタイミングについては、どの程度の頻度で更新されたいかなど、サイトの事情に合わせて設定すると良いと思います。
このように設定して、指定したスケジュールごとに自動的に browscap のデータファイルのチェックが行われて、更新があった場合には、差し替えが自動で行われるようになりました。