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


[まとめ] 現在開催中のKindleセール情報はこちら

本来であれば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実行時のみ処理を実行させることができました。

参考

[まとめ] 現在開催中のKindleセール情報はこちら