开发者

Limit instances of rake task

Is there a way to limit the number of instances of a rake task?

I have a rake task for reading emails that runs every 5 mins as a cron job.

Sometimes the rak开发者_JS百科e tasks takes more than 5 mins to complete and another rake task is launched before it finishes.

There are hacky workarounds to check ps -Af inside the rake file but I am looking for cleaner way to limit launching multiple instances of the rake tasks similar to how the daemon gem does.

Checking emails is just an example, I have several such rake tasks that involve polling multiple servers.


You could also just use a PidFile.

First, install the 'pidfile' gem. Then make your task like this:

task :my_task => :environment do |task|
    PidFile.new(:piddir => Rails.root.join('tmp', 'pids'), :pidfile => task.name)

    # do some stuff
end


Still can't find a super elegant way, so I resorted to saving a unique file for each rake task.

This is how the rake task looks now -

run_unique_rake(__FILE__) do
     puts "\n is running\n"
     sleep(40)
end

here is run_unique_rake

def self.run_unique_rake(file)    
    path = RAILS_ROOT + "/" + CONFIG['rake_log'] + "/" + File.basename(file)

     unless File.exists?(path)
        `touch #{path}`
         yield if block_given?
         `rm #{path}`
     end
end

Still hoping for an elegant way within rake to limit to a single instance.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜