#! /bin/sh # Shell-based mutex using mkdir. lockdir="$1" prog="$2"; shift 2 || exit 1 # Remember when we started trying to acquire the lock. count=0 touch lock-stamp.$$ trap 'rm -r "$lockdir" lock-stamp.$$' 0 until mkdir "$lockdir" 2>/dev/null; do # Say something periodically so the user knows what's up. if [ `expr $count % 30` = 0 ]; then # Reset if the lock has been renewed. if [ -n "`find \"$lockdir\" -newer lock-stamp.$$`" ]; then touch lock-stamp.$$ count=1 # Steal the lock after 5 minutes. elif [ $count = 300 ]; then echo removing stale $lockdir >&2 rm -r "$lockdir" else echo waiting to acquire $lockdir >&2 fi fi sleep 1 count=`expr $count + 1` done echo $prog "$@" $prog "$@" # The trap runs on exit.