herokuで定期的な処理を行いたい場合、大体はaddonのheroku Schedulerを使うことになると思うので、簡単にまとめてみる。
特徴など
- タスクは複数登録可能
- タスクの起動間隔は10分おき、1時間おき、1日おきで選べる。
- heroku schedulerはベストエフォート型のサービスなので、実行開始時間は多少の遅延したり、スキップされることがあるので注意する
- 無償でできるのはプロセスの利用時間は1Dynos (= 750時間(/1ヶ月))
- WebのDynosを1つ利用していた場合、(1ヶ月が31日の場合)
24h * 31日 = 744hなので、残りの6h分のプロセスのみスケジュールタスクとしての処理時間として利用できます。 - それ以降は1時間あたり$0.05かかる(1ヶ月フル使用で$37.2)
- 利用状況は https://dashboard.heroku.com/account のBilling のところで確認できる
- herokuのアプリケーションをメンテナンスモードにしている場合、時間になってもタスクは実行
されない(スキップされる)
何はともあれaddonを追加
コンソールから
$ heroku addons:add scheduler:standard
またはaddonページから
https://addons.heroku.com/scheduler
※アドオンは無償ですが、オーバーしたプロセスが課金対象になるのでクレジット登録になります。
スケジュール画面を開く
$ heroku addons:open scheduler
タスクの登録
Railsの場合
lib/tasks
の下にrakeファイルを作成
test.rake
task :test_task => :environment do
#処理
puts 'done.'
end
スケジュール管理画面でAdd Job...
を選択
TASKにrake test_task
を設定
FREQUENCYに起動間隔を設定。
Sinatraの場合
scheduler用の実行ファイルを作成
task.rb
# 処理
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