Skip to content

Instantly share code, notes, and snippets.

@ahoward

ahoward/a.rb

Created Dec 9, 2010
Embed
What would you like to do?
#! /usr/bin/env ruby
status = DATA.flock(File::LOCK_EX | File::LOCK_NB)
if status == 0
puts "we have the lock..."
sleep
else
puts "another process has the lock..."
exit
end
__END__
### this data section MUST be here for DATA.flock to function.
### the user locking the script MUST have write privledges to the script
@ahoward

This comment has been minimized.

Copy link
Owner Author

@ahoward ahoward commented Dec 9, 2010

this is a simple technique that portably prevents two copies of a script from running at the same time. if you have ruby scripts in your crontab you will burn in hell if you aren't using this or a similar technique to prevent script stacking taking your box down. same applies for background jobs.

@lmarburger

This comment has been minimized.

Copy link

@lmarburger lmarburger commented Dec 11, 2010

Great idea! Just today I wrote a backup script and made use of this technique.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment