2020年3月16日月曜日

Rails: wheneverから登録するjobをtsに連動させで逐次処理(cron job sequence)

久々の中の人です。

日々の業務で投稿するトピックがあまりないので......(言い訳)

同時刻にジョブを投入しつつ、同時には実行したくない場合がありませんか。
順番に処理して欲しいけど時間差を考慮して投入するなんてことはしたくない!

schedule.rbにて
#以降、投入されるジョブの記述は全てts経由になる。
set :job_template, "/bin/ts /bin/bash -l -c ':job'"
#定義は必須ではない。job_templateの定義が本体。
job_type :ts, "cd :path && bin/rails runner -e :environment ':task' :output"

every '0 10 * * *' do
    ts "Batch::hoge.run"
    ts "Batch::huga.run"
end

各バッチで重複実行を抑止する為に/proc以下の監視やpsなどでチェックを
している場合、cronで直接実行する訳ではないので、プロセス数がcronから
実行する場合とは異なります。