my story blog

JavaScriptとかRubyの技術的なことを書きたい

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