LoginSignup
1
0

More than 5 years have passed since last update.

Rails wheneverで秒数まで指定して実行する

Posted at

やりたいこと

Railsでcronを管理するためのgem wheneverを使って秒数まで指定してバッチを実行する。

cronは分数までしか指定できない。

てっきりschedule.rbにてevery :day, at: jst_to_utc('8:00 pm') doと指定すれば
YYYY-MM-DD 20:00:00に実行されるものだと思っていましたが、どうやら多少の誤差があるようです。
実行結果を見ると、7~13秒ほど遅れて実行されていました。

00秒きっちりにバッチ処理を実行するにはcronの指定だけではできないようです。

batch内でどうにかする

例 )
毎時 10分00秒にバッチを実行したい場合
バッチが00:09:13あたりに実行されてそこから00:10:00までループ処理を実行します。
すると実行したい処理が00秒きっちりに実行されるようになりました。

config/schedule.rb

every '9,19,29,39,49,59 * * * *' do
  runner 'Hoge::Fuga.execute'
end

app/batches/hoge/fuga.rb

module Hoge
  class Fuga < ApplicationBatch
    def process
      loop do
        break if Time.current.sec.zero?
      end
      p Time.current
      ## 実行したい処理
    end
  end
end
$ rails runner 'Hoge::Fuga.execute'
> Fri, 18 Jan 2019 12:48:00 JST +09:00

00秒ぴったりに実行されました。

無事秒数まで指定してbatchを実行することができましたが、処理が走ってから00秒になるまでずっとループしているので少し怖いです。

もしイケてる方法を知っている方がいたらご教授お願いします。

参考にしたもの

1
0
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
1
0