hello-world
webエンジニアのメモ。とりあえずやってみる。

[php]環境変数を用いてcron実行時のみスクリプトを実行する

公開日時

本来であればcron実行するスクリプトはdocumentroot外に置くべきですが、どうしてもdocumentroot以下に設置する必要があった場合に、cron経由でしかphpが実行されないようにするための方法を調べてみました。

cron実行の場合のみ、特定の環境変数を渡すようにすればよさそうです。

# test.php

<?php
if (getenv('CRON') == 1) {
  // cron経由で実行したい処理を記述
  echo "cron!\n";
}

php test.php を直接実行しても何も起きません。

CRON=1 php test.php とすると「cron!」と表示されます。

crontabに以下を設定

PROJECT_DIR="/home/vagrant/sample"
* * * * * /bin/bash -c 'cd ${PROJECT_DIR} && CRON=1 /usr/bin/php test.php' >> ${PROJECT_DIR}/logs/cronlog.log 2>> ${PROJECT_DIR}/logs/cronlog_err.log

これでcronlog.logに毎分 cron! と表示されます。

環境変数を指定することでcron実行時のみ処理を実行させることができました。

参考


Related #php

[php]google-api-php-clientでCould not json decode the access tokenというエラーが出た

phpで google-api-php-client を用いて、 GoogleAnalytics からアクセス数の多いページを取得する処理を書いていたのですが、proxy環境下だと

CentOS6.3でyumを使ってphp5.4からphp5.3にダウングレード

諸事情によりCentOS6.3のサーバにインストールされたphp5.4をphp5.3にダウングレードする必要があったので、対応方法をメモしておきます。

PHPからrsyncを実行する

「stg環境でアップロードしたファイルを、本番環境へ反映する管理機能が欲しい」という要望があった場合、同一サーバ内であればcpコマンドでファイルをコピーできますが、stg環境と本番環境が分かれている場合はrsyncコマンドでファイルを転送する必要があります。