[Berlin-wireless] dotlockfile

lorenz schori lorenz.schori
So Sep 30 17:11:26 CEST 2007


Hallo

Ich erinnere mich diffus an eine Diskussion betreffend locking- 
mechanismen für Scripts. Weil ich auf wlanware nichts gefunden habe  
müsste das wohl in dieser Liste gewesen sein. Ich hab jetzt eine mini- 
Version des dotlockfile-Kommandos in ash implementiert (auf baseis  
von [1]), die für mich ganz gut funktioniert. Soll ich dafür ein ipk  
machen oder brauchen wir sowas sowieso direkt in der Firmware?

locking:
dotlockfile [-r<sekunden>] [-l] bla

unlocking:
dotlockfile -u bla

LG
Lorenz

[1] http://members.toast.net/art.ross/rute/ 
node24.html#SECTION002471000000000000000

#!/bin/sh
usage () {
   echo "$0 -l|-u file"; exit 1
}

try_lock() {
   ln $1 $2 >/dev/null 2>&1 && rm -f $1
}

lock () {
   TEMPFILE="$1.$PPID"
   LOCKFILE="$1.lock"

   echo $PPID >$TEMPFILE || return 1
   try_lock $TEMPFILE $LOCKFILE && return 0

   # rm stale
   kill -0 $(cat $LOCKFILE) >/dev/null 2>&1 && {
     rm -f $TEMPFILE; return 1
   }
   rm -f $LOCKFILE

   try_lock $TEMPFILE $LOCKFILE && return 0
   rm -f $TEMPFILE; return 1
}

unlock () {
   rm -f $1.lock
}

op="l"
retry=5
while getopts "luhr:" Opt; do case $Opt in
   l|u ) op=$Opt;;
   r ) retry=$OPTARG;;
   * ) usage;;
esac; done
shift $(($OPTIND - 1))
[ -z "$1" ] && usage
case $op in
   l ) while ! lock $1; do
         [ $retry -gt 0 ] && {
           cnt=$((cnt+1));
           [ $cnt -ge $retry ] && exit 1;
         }
         sleep 1;
       done;;
   u ) unlock $1;;
esac

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : PGP.sig
Dateityp    : application/pgp-signature
Dateigröße  : 186 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.berlin.freifunk.net/pipermail/berlin/attachments/20070930/be550a65/attachment.pgp>



Mehr Informationen über die Mailingliste Berlin