Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ## Copyright (C) 2009 Przemyslaw Pawelczyk <przemoc@gmail.com>
- ## License: GNU General Public License v2, v3
- #
- # Lockable script boilerplate
- ### HEADER ###
- LOCKFILE="/var/lock/`basename $0`"
- LOCKFD=99
- # PRIVATE
- _lock() { flock -$1 $LOCKFD; }
- _no_more_locking() { _lock u; _lock xn && rm -f $LOCKFILE; }
- _prepare_locking() { eval "exec $LOCKFD>\"$LOCKFILE\""; trap _no_more_locking EXIT; }
- # ON START
- _prepare_locking
- # PUBLIC
- exlock_now() { _lock xn; } # obtain an exclusive lock immediately or fail
- exlock() { _lock x; } # obtain an exclusive lock
- shlock() { _lock s; } # obtain a shared lock
- unlock() { _lock u; } # drop a lock
- ### BEGIN OF SCRIPT ###
- # Simplest example is avoiding running multiple instances of script.
- exlock_now || exit 1
- # Remember! Lock file is removed when one of the scripts exits and it is
- # the only script holding the lock or lock is not acquired at all.
Add Comment
Please, Sign In to add comment