ログってなんぼ

エンジニアのメモです

rails runner処理の重複起動を制御する

qiita.com

こちらのアイデアを拝見

app/helpers/cron.rb

module Cron
  def already_exists?(file_name)
        process_count = `ps -ef | grep "#{file_name}" | grep -v grep | wc -l`.to_i
        process_count > 2
  end
end

bin/hoge.rb

include Cron

unless already_exists?("#{File.basename(__FILE__)}")
  #処理
end

自分のファイル名でプロセス一覧をgrepし、ヒットした行数を制御の判断材料にするアイデア

rails runnerの場合、プロセスが2個になるので条件を > 2としました。2は「自分自身の分」です。

4とかになっていたら多重起動の疑いが強いという判断。

コレで望みどおり動くようになりました

rubyのスクリプトでプロセス確認したくない場合

okisanjp.hatenablog.jp

* * * * * /usr/local/bin/setlock -Xn $HOME/hoge.lock /bin/bash -lc 'cd /path/to/project;rails runner -e develop bin/hoge.rb'

cronとsetlockだけで実現したければ上記のような感じでもOK