読者です 読者をやめる 読者になる 読者になる

Septeni Engineer's Blog

セプテーニエンジニアが綴る技術ブログ

本番環境と開発環境で、cronのバッチの振る舞いを変える方法

お久しぶりです。
約半年ぶりのfujitaです。こんばんわ。

本番環境と開発環境で、cronのバッチの振る舞いを変える事ってよくありますよね?
今回はPHPでの例ですが、その一案について書きます。

例えば、下記のようなコードがあったとします。

<?php
class BlogShell extends AppShell {
    public function main() {
        $this->out('Hello world.');
    }

    public function where_is_here() {
        if(preg_match("/^(dev)\./", $_SERVER['SERVER_NAME'])){
            // 開発環境
            $this->log('Hi! @staging');
        }else{
            // 本番環境
            $this->log('Hi! @production');
        }
    }
}

これを、

  • 本番環境サーバー ・・・ labs.septeni.co.jp
  • 開発環境サーバー ・・・ dev.labs.septeni.co.jp
で、振る舞いを変えたいわけですが、
crontabで下記のようにスケジュールを設定し、

*/1 * * * * /home/hoge/app/Console/cake Blog where_is_here

実行させた場合、下記のような結果になります。

$ tail -f app/tmp/logs/error.log
2013-07-30 21:27:01 Error: Hi! @production

当然ですね。
これは、環境変数「$_SERVER['SERVER_NAME']」が取得できてないからですね。

そこで、開発環境のcronの設定を、

HOSTNAME="dev.labs.septeni.co.jp"
*/1 * * * * /home/hoge/app/Console/cake Blog where_is_here


と変数「HOSTNAME」を定義しまして、where_is_here()メソッドを下記のように修正することで、期待した通りの結果となります。

public function where_is_here() {
    if(preg_match("/^(dev)\./", $_SERVER['HOSTNAME'])){
        // 開発環境
        $this->log('Hi! @staging');
    }else{
        // 本番環境
        $this->log('Hi! @production');
    }
}
$ tail -f app/tmp/logs/error.log
2013-07-30 21:32:01 Error: Hi! @staging


これで、本番環境と開発環境で振る舞いを変える事ができました。

めでたしめでたし。 :-)