rake check if already running
I use lockrun to prevent cron tasks from running multiple times (this only works when invoking the command through the same lockrun
invocation, so if you need to protect from various invocation paths, then you'll need to look for other methods).
In your crontab, you invoke it like this:
*/5 * * * * /usr/local/bin/lockrun --lockfile=/var/run/this_task.lockrun -- cd /my/path && RAILS_ENV=production bundle exec rake this:task
Also, you can use a lockfile, but handle it in the task:
def lockfile
# Assuming you're running Rails
Rails.root.join('tmp', 'pids', 'leads_task.lock')
end
def running!
`touch #{lockfile}`
end
def done!
`rm #{lockfile}`
end
def running?
File.exists?(lockfile)
end
task :long_running do
unless running?
running!
# long running stuff
done!
end
end
This probably could be extracted into some kind of module, but you get the idea.