Initial commit
authorFrancois Fleuret <francois@fleuret.org>
Sat, 13 Mar 2010 22:10:54 +0000 (23:10 +0100)
committerFrancois Fleuret <francois@fleuret.org>
Sat, 13 Mar 2010 22:10:54 +0000 (23:10 +0100)
withlock.sh [new file with mode: 0755]

diff --git a/withlock.sh b/withlock.sh
new file mode 100755 (executable)
index 0000000..980deb1
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.  #
+#                                                                       #
+# Written by and Copyright (C) Francois Fleuret                         #
+# Contact <francois.fleuret@idiap.ch> 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> [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
+
+$*