Guest User

Untitled

a guest
Jul 1st, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.96 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ## Copyright (C) 2009 Przemyslaw Pawelczyk <przemoc@gmail.com>
  4. ## License: GNU General Public License v2, v3
  5. #
  6. # Lockable script boilerplate
  7.  
  8. ### HEADER ###
  9.  
  10. LOCKFILE="/var/lock/`basename $0`"
  11. LOCKFD=99
  12.  
  13. # PRIVATE
  14. _lock() { flock -$1 $LOCKFD; }
  15. _no_more_locking() { _lock u; _lock xn && rm -f $LOCKFILE; }
  16. _prepare_locking() { eval "exec $LOCKFD>\"$LOCKFILE\""; trap _no_more_locking EXIT; }
  17.  
  18. # ON START
  19. _prepare_locking
  20.  
  21. # PUBLIC
  22. exlock_now() { _lock xn; } # obtain an exclusive lock immediately or fail
  23. exlock() { _lock x; } # obtain an exclusive lock
  24. shlock() { _lock s; } # obtain a shared lock
  25. unlock() { _lock u; } # drop a lock
  26.  
  27. ### BEGIN OF SCRIPT ###
  28.  
  29. # Simplest example is avoiding running multiple instances of script.
  30. exlock_now || exit 1
  31.  
  32. # Remember! Lock file is removed when one of the scripts exits and it is
  33. # the only script holding the lock or lock is not acquired at all.
Add Comment
Please, Sign In to add comment