以下コマンドで cron が使えるようになる。
rhc cartridge-add cron-1.4 --app アプリケーション名
sshで接続して確認するとこんなディレクトリ構成になっている。daily, hourly, minutely, monthly, weekly ディレクトリに実行プログラム, jobs.allow, jobs.deny を配置することで定期処理が行われる。
cd $OPENSHIFT_REPO_DIR.openshift/cron/
tree -d .
.
├─ daily
├─ hourly
├─ minutely
├─ monthly
├─ README.cron
└─ weekly
例えば1分おきに test.php を実行させたい場合は、minutely ディレクトリ内に jobs.allow, jobs.deny, test.php ファイルを作成する。
cd $OPENSHIFT_REPO_DIR.openshift/cron/minutely/
touch jobs.allow jobs.deny test.php
test.php は $OPENSHIFT_LOG_DIR/test.log に 現在年月日時分秒 を出力するだけの簡単なもの(※ 1行目に #!/usr/bin/php
を書かないと実行されないので注意)
#!/usr/bin/php
<?php
date_default_timezone_set( "Asia/Tokyo" );
$log_file = $_SERVER["OPENSHIFT_LOG_DIR"] . "test.log";
$now_date = date( "Y年m月d日 H時i分s秒" );
file_put_contents( $log_file, "{$now_date}\n", FILE_APPEND );
最後に jobs.allow に実行させたいプログラムを記述して終了。これで1分毎に test.php が実行される。
cd $OPENSHIFT_REPO_DIR/.openshift/cron/minutely/
echo "test.php" > jobs.allow
きちんと実行されているか tail で確認。実行時間にムラがあるけど毎分実行されている。
tail -f $OPENSHIFT_LOG_DIR/test.log
2014年06月09日 15時07分13秒
2014年06月09日 15時08分11秒
2014年06月09日 15時09分10秒
2014年06月09日 15時10分22秒
プログラムの実行をとめる場合は jobs.allow の該当行を削除またはコメントアウトする。
cd $OPENSHIFT_REPO_DIR.openshift/cron/minutely/
vim jobs.allow
# test.php
「5分おきに実行」「毎週金曜の5時5分に実行」といった制御はできない(有料プランだとできる?不明)。
どうしてもやりたいのであれば、プログラム内で時間みて制御する。「5分おきに実行」であればこんな感じか。
#!/usr/bin/php
<?php
if ( date("i") % 5 !== 0 ) {
exit;
}
// 実行させたい処理