setlockとは
ファイルをロックすることで重複排除を実現するコマンドです。
daemontoolをインストールすると使えるようになります。
setlockを使って簡単に多重起動防止機能を実装する
実現方法
利用するjob_typeにsetlockの記述を追加します。
/tmpにタスク名のファイルを作り、それをロックすることで重複排除するようにしました。
config/schedule.rb
# original runner
# job_type :runner, "cd :path && bin/rails runner -e :environment ':task' :output"
# new runner
job_type :runner, "cd :path && setlock -n /tmp/:task bin/rails runner -e :environment ':task' :output"
every 1.minutes do
runner 'SampleModel.sample_method'
end
これにより/tmp/SampleModel.sample_method
を通して重複排除が実現できます。
以上です。
whenever rails prohibit duplicate runとかで検索しても期待する答えに行き着かなかったので、共有しました。
誰かの役に立てれば幸いです。
もっと良い書き方があれば、教えてもらえると嬉しいです。