🐶
Herokuのdaily restartを制御する
はじめに
Heroku では、1日に一度 dyno のリスタートが行われます。この動作は仕様によるもので、例えば、前回スタートが PM1:00 であれば、次の日の PM1:00 を基準として、 0 ~ 216 分後にリスタートが行われます。
リスタート自体は、例えばデプロイ時も行われるので、想定していた定時リスタートが意図しないタイミングで行われることもないです。
そのため、Heroku Scheduler を使用して、意図的にリスタートを行うための設定をここに記載します。
後述する「<app_name>」は、対象のアプリ名に置き換えてください。
準備
あらかじめ、Heroku Scheduler のアドオンを追加します。CLI で追加する場合は以下のコマンドを実行します。
heroku addons:create scheduler:standard -a <app_name>
その後ビルドパックとして以下の追加します。CLI で追加する場合は以下のコマンドを実行します。
https://github.com/heroku/heroku-buildpack-cli
heroku buildpacks:add heroku-community/cli -a <app_name>
Heroku Scheduler の設定
Heroku Scheduler の設定画面を開き、以下のコマンドを追加します。
コマンドの意味としては、以下の通りです。有効期限なしの API キー発行もできますが、あえて 10 分間だけ有効なものを生成しています。
-
HEROKU_API_KEY
に Heroku CLI の API キーを設定します。この時。API キーは 10 分間だけ有効なものを生成します。 -
heroku ps:restart -a <app_name>
で、対象のアプリを再起動します。
heroku run "HEROKU_API_KEY=`heroku authorizations:create --expires-in 600 --short` heroku ps:restart -a <app_name>" -a <app_name>
また、Scheduler 設定のタイムゾーンは UTC 固定であることに注意してください。
おわりに
以上で、Heroku の daily restart を制御する方法を紹介しました。
意外と情報がまとまってない印象でしたので、参考になれば幸いです。
Discussion