#!/bin/bash -- # Flock usage illustration. filelock() { # Flock using a lockfile. Argument: lockfile path. [ -e $1 ] || touch $1 exec 9<$1 flock -e -n 9 return $? } fileunlock() { # Release flock. Argument: lockfile path. exec 9<&- rm -f $1 } ## Try file lock. LOCKFILE=/tmp/flock.lock LOCK_TIMEOUT=10 COUNT=0 LOCKRET=1 while :; do filelock $LOCKFILE LOCKRET=$? [ $LOCKRET -eq 0 ] && break if [ $COUNT -ge $LOCK_TIMEOUT ]; then echo "timeout while waiting lock" exit 1 fi echo "trying lock" : $((COUNT+=1)) sleep 1 done ## Do actual jobs here. echo "lock success" echo "doing job" sleep 10 fileunlock $LOCKFILE exit 0