Skip to content

Instantly share code, notes, and snippets.

@ahoward
Created December 9, 2010 16:33
Show Gist options
  • Save ahoward/734929 to your computer and use it in GitHub Desktop.
Save ahoward/734929 to your computer and use it in GitHub Desktop.
#! /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
Copy link
Author

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
Copy link

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