rake task の多重起動を禁止する排他処理を行う
rake task で長時間起動するため排他処理をしておかないと複数起動してしまう物があったので多重起動を禁止にしました。
namespace :foo do task :update_all => :environment do |task| process_count = `ps -ef | grep #{task.name} | grep -v grep | wc -l`.to_i next if process_count > 1 end end
でOK。呼び出し部分をメソッド化とかしたかったけど、上手くいかなかったのでとりあえずこれで。タスクのブロック引数としてtask
をちゃんと書いておかないとtask.name
が使えないので注意しましょう。
参考
[ShellScript – Rakeタスク実行時、プロセス起動数を確認して排他制御する – Qiita][1]