Heroku Schedulerで任意の間隔でスクリプトを実行したい
1週間毎とかに実行したい。
Heroku Schedulerは実行間隔を10分毎、1時間毎、1日毎しか設定できない
もう少し選べるといいが、仕方ない。。
1週間毎に起動させる例
ただのブロック節でコントロールする。
全体像
- 前回実行時間を記録するymlファイルを作る
- ymlファイルをロードして現在時刻が前回実行時間から1週間後かを判定する
- スクリプトの実行が終わったらその時間をymlに書き込む
前回実行時間を記録するymlファイルを作る
last_acted_at: '2021-04-01 08:27:20'
ymlファイルをロードして時刻を判定する
スクリプトの実行が終わったらその時間をymlに書き込む
class TimeKeeper require 'yaml' def last_acted_at data = open('./lib/time_keeper/last_acted_at.yml', 'r') { |f| YAML.load(f) } Time.zone.parse(data['last_acted_at']) end def update_last_acted_at data = { 'last_acted_at' => Time.current.strftime('%Y-%m-%d %H:%M:%S') } YAML.dump(data, File.open('./lib/time_keeper/last_acted_at.yml', 'w')) end def since_7days_from_last_acted_at? Time.current >= last_acted_at.since(7.days) end end
スクリプトの例
@time_keeper = TimeKeeper.new p '前回起動時から7日間が経過していません' and return unless @time_keeper.since_7days_from_last_acted_at? 〜実行したい処理〜 @time_keeper.update_last_acted_at
判定の時間を任意に変更すれば実行間隔を変えられる
ただし10分未満毎とかはできないので注意。