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]