From: Francois Fleuret Date: Sat, 13 Mar 2010 22:10:54 +0000 (+0100) Subject: Initial commit X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=scripts.git;a=commitdiff_plain;h=c4500f72d280b51f5d8e229c33bfa45b57cbffbc Initial commit --- diff --git a/withlock.sh b/withlock.sh new file mode 100755 index 0000000..980deb1 --- /dev/null +++ b/withlock.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +######################################################################### +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the version 3 of the GNU General Public License # +# as published by the Free Software Foundation. # +# # +# This program is distributed in the hope that it will be useful, but # +# WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # +# General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +# Written by and Copyright (C) Francois Fleuret # +# Contact for comments & bug reports # +######################################################################### + +# This command allows to call another command with a lockfile to avoid +# concurrent executions for the same user. + +set -e + +if [[ ! $1 ]]; then + echo "withlock.sh [command args]" + exit 1 +fi + +LOCKFILE=/tmp/lock$(which $1 | sed -e "s:/:-:g").${USER} + +(set -C && : > ${LOCKFILE}) 2> /dev/null + +if [ $? != "0" ]; then + echo "Lockfile ${LOCKFILE} exists." >&2 + exit 1 +fi + +trap 'rm ${LOCKFILE}' EXIT + +$*