From: Alexander Barton Date: Tue, 20 Dec 2016 21:07:26 +0000 (+0100) Subject: Create and test for a lockfile for each job X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=trigger-rcmd.git;a=commitdiff_plain;h=cbe1996750d31fa0a12165442ad4c909f9d4da90 Create and test for a lockfile for each job --- diff --git a/scripts/trigger-rcmd b/scripts/trigger-rcmd index 90c19bd..cfd4d79 100755 --- a/scripts/trigger-rcmd +++ b/scripts/trigger-rcmd @@ -124,7 +124,7 @@ do_rcmd() { NO_WAKE= # Check required tools -for t in fping ssh etherwake; do +for t in fping ssh etherwake lockfile-create; do if ! command -v "$t" >/dev/null 2>&1; then echo "$NAME: Required tool \"$t\" missing, aborting!" exit 3 @@ -153,8 +153,15 @@ while [ $# -gt 0 ]; do r=1 else echo "$NAME: Working on \"$1\" - $(date "+%Y-%m-%d %H:%M:%S")" - do_rcmd "$1" ; r=$? - echo "$NAME: Done ($r) - $(date "+%Y-%m-%d %H:%M:%S")" + lck="/run/lock/$NAME-$1.lock" + if lockfile-create --quiet --use-pid --retry 2 --lock-name "$lck"; then + do_rcmd "$1" ; r=$? + echo "$NAME: Done ($r) - $(date "+%Y-%m-%d %H:%M:%S")" + rm -f "$lck" + else + echo "$NAME: Failed to acquire lock file, skipping job! ($lck)" + r=1 + fi fi [ $r -ne 0 ] && result=1 shift