curl コマンドを使って Web 経由で叩いていた一部のバッチ処理を、cron.php を使って動作させるようにしました。
どちらにしても、シェルから実行させるのには変わりないのですが、リクエストのタイムアウトや、nginx, apache のリソースを考えると、php クライアントから直接実行できるに越したことはありません。
cron.php の呼び出しは Codeigniter で作ったコントローラやメソッドを指定するだけなので、Web アプリ向けの処理がそのまま使えるメリットもあります。
また、config などを環境ごとにディレクトリ分けしている場合、nginx や apache の環境変数に「production」や「staging」「development」などを持たせているケースもあると思いますが、cron.php を使う場合は export コマンドで env に設定しておけば大丈夫です。
cron.phpのダウンロード
現状、cron.php の最新版は 2013 年が最終更新ということで間が空いていますが、Codeigniter のバージョン 2 では問題なく動作を確認しています。
Codeigniter も 2015 年にバージョン 3 が発表され間もなく 1 年が経過するので、バージョン 3 での動作確認もしておきたいところですが、まだバージョン 2 を使っているので、本体のバージョンアップを含めこれは今後の課題ということで。
さて、cron.php は以下からダウンロードができます。詳細は README.md を確認してみてください。
cron.phpの使い方
基本的な使い方は以下の通り、Web からの呼び出しと同じくコントローラとメソッドをスラッシュで区切って –run に渡すだけです。
ログの出力先なども選択できるので、バッチ運用も楽になると思います。
また、環境変数は例えば ENVIRONMENT という変数を nginx や apache で使用している場合、cron.php の呼び出し前に export で ENVIRONMENT に必要な値を設定しておけば問題ありません。
1 2 | $ export ENVIRONMENT=production $ php cron.php --run=/controller/method |