rails runner処理の重複起動を制御する
こちらのアイデアを拝見
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のスクリプトでプロセス確認したくない場合
* * * * * /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