heroku schedulerの使い方(Rails,sinatra)
(qiitaにも書いたけどこっちにも。)
herokuで定期的な処理を行いたい場合、大体はaddonのheroku Schedulerを使うことになると思うので、簡単にまとめてみる。
特徴など
- タスクは複数登録可能
- タスクの起動間隔は10分おき、1時間おき、1日おきで選べる。
- heroku schedulerはベストエフォート型のサービスなので、実行開始時間は多少の遅延したり、スキップされることがあるので注意する
- 無償でできること
- プロセスの利用時間は1Dynos = 750時間(/1ヶ月)
- 24h * 31日 = 744hなので1タスクであれば、1ヶ月フルで利用しても大丈夫(だけど、Webと共有なのでWeb側を使っていれば実際はもっと少なくなる?誰か教えて下さい・・・・)
- それ以降は1時間あたり$0.05かかる(1ヶ月フル使用で$37.2)
何はともあれaddonを追加
コンソールから
$ heroku addons:add scheduler:standard
またはaddonページから https://addons.heroku.com/scheduler
※アドオンは無償ですが、オーバーしたプロセスが課金対象になる?のでクレジット登録になります。
スケジュール画面を開く
https://heroku-scheduler.herokuapp.com/dashboard
$ heroku addons:open scheduler
タスクの登録
Railsの場合
lib/tasks
の下にrakeファイルを作成
task :test_task => :environment do #処理 puts 'done.' end
スケジュール管理画面でAdd Job...
を選択
TASKにrake test_task
を設定
FREQUENCYに起動間隔を設定。
Sinatraの場合
scheduler用の実行ファイルを作成
# 処理 puts 'done.'
スケジュール管理画面でAdd Job...
を選択
TASKにbundle exec ruby task.rb
を設定
ログの確認
$ heroku logs --ps scheduler.xxxx #(xxxxは実行時に割り当てられたプロセス番号)
公式Doc
https://devcenter.heroku.com/articles/scheduler#defining-tasks