30
30

More than 5 years have passed since last update.

[Heroku] 特定の時間帯にDynoを起動させておくためのワンライナー (Heroku Scheduler用)

Last updated at Posted at 2014-10-08

Herokuで1サービス1Dynoでサービスを公開している場合、一定時間アクセスがないとDynoがidle状態になり、次回アクセス時にDynoの起動時間分の時間がかかります。

それを回避するためにHerokuのDynoが寝ないようにするのように定期的(Hourly)にHeroku Schedulerから起こしてあげるという対策をしていることが多いかと思います。

ただ、Herokuで(1サービス1Dynoの)サービスを2個以上公開している場合には、すべてのサービスを常時起動しておくと無料枠(750時間)を超えることになります。

そこで、常時アクセスがあるわけではなくて、できれば無料枠(750時間)内に、もしくはできるだけ安価に収めたい場合は、Heroku Schedulerで下記のような感じで(確実に)起動させておきたい時間帯を指定してDynoを起こしてあげるようにするのが良さそうです。

Heroku SchedulerのFREQUENCYHourlyで、TASK

# 9:00 - 21:00 JST (= 0:00 - 12:00 UTC) の間、起動しておきたい場合
$ seq 0 12 | grep -qw $((10#`date -u "+%H"`)) && curl http://xxxx.herokuapp.com > /dev/null 2>&1
# 6:00 - 18:00 JST (= 21:00 - 9:00 UTC) の間、起動しておきたい場合
$ (seq 21 23; seq 0 9) | grep -qw $((10#`date -u "+%H"`)) && curl http://xxxx.herokuapp.com > /dev/null 2>&1
30
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
30