[heroku]One-Off DynoでPHPをバックグラウンドで動作させる
バッチ処理なんかを動作させるためにバックグラウンドでPHPを起動する方法を調べてみた。
PHPをコマンドから実行
PHPをコマンドラインから実行させるには以下。
$ php hogehoge.php
dynoについて
dynoの種類なんかについては以下がすごくわかりやすかった。
構築・運用の必須知識! Herokuアプリケーションの実行プラットフォーム「Dyno」を徹底的に理解する (1/3):CodeZine
One-off dynoの起動
今回使用するのは、One-off dyno。
これを起動させる方法は2種類あって、
一つは、Heroku Schedulerのアドオンを入れて、
そこから定期的に実行させる方法。
実際にバッチ処理をさせる場合はここに登録する。
冒頭のPHPを起動させるコマンドをそのまま登録する。
実行されたログはpapertrail上だと以下のような形となる。
もう一つはコマンドラインからの実行。
これだと任意のタイミングですぐに実行出来るので待たなくてよい。
heroku run
で、herokuでコマンドを実行出来る。
以下、コマンド。
$ heroku run 'php hogehoge.php'
コマンドで実行した場合は、ターミナルに標準出力した結果や、echo
された内容なんかがそのまま返ってくる。
(エラーが出てればわかる)
メリット
通常のWeb dynoの場合、リクエストしてからレスポンスがあるまでに30秒以上かかってしまうと、タイムアウトが発生し、
heroku側がエラーページを返してしまう。
この設定はこちら側ではどうやっても変更不可能なよう。
しかし、One-off dynoやworker dynoを使用してバックグラウンド実行させた場合はこの限りではなく、
処理によるタイムアウトはない。
なので、重いファイルや重い処理も可能。
後は、このアプリをバッチだけに限定して使用する場合、web dynoをゼロにしてしまえる。
ブラウザからのアクセスが出来なくなるが、バッチの性質上、不要。むしろアクセス出来ない方が都合がよい。
値段も安くすむ(もしくは無料)し。
参考
one off dynos · herokaijp/devcenter Wiki · GitHub
コマンドラインからPHPを実行 – XAMPPの使い方 – PC設定のカルマ
構築・運用の必須知識! Herokuアプリケーションの実行プラットフォーム「Dyno」を徹底的に理解する
(1/3):CodeZine
Heroku のタイムアウトについて調べた & 翻訳 – ボクココ
公式ドキュメント類
One-Off Dynos
Process Types and the Procfile
Worker Dynos, Background Jobs and Queueing
Heroku Scheduler