#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 [name] [script]"
    exit 1;
fi

NAME=$1
SCRIPT=$2

SILENT="no"
if [ $# -ge 3 -a "$3" == "--silent" ]; then
    SILENT="yes"
    shift
fi

shift 2

LOCKDIR="/var/tmp/$NAME"
PIDFILE="$LOCKDIR/pid"

function cleanup {
    rm -rf "$LOCKDIR"
}

RESTORE_UMASK=$(umask -p)
umask 0077
mkdir "$LOCKDIR" >& /dev/null
if [ $? != 0 ]; then
    PID=$(cat "$PIDFILE")
    if [ -n "$PID" ] && /bin/ps $PID > /dev/null
    then
        if [ "$SILENT" != "yes" ]; then
	    echo "$PID is still running"
	    /bin/ps -o user,pid,start,time,comm $PID
	fi
        exit 1;
    else
        echo "$LOCKDIR exists but $PID is dead"
        echo "Removing lockdir and re-running"
        /bin/rm -rf $LOCKDIR
        mkdir $LOCKDIR || exit
    fi
fi

trap cleanup EXIT SIGQUIT SIGHUP SIGTERM
echo $$ > "$PIDFILE"

$RESTORE_UMASK
eval "$SCRIPT $*"

