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