Nitpicking grammar in my own patch... Here's a slightly better patch, only because man flock(1) clarifies that one can pass only a single command with direct invocation of flock. Below the synopsis are three other quotes from the man page. Only the third form, which is not used by run-one, allows multiple commands to be run.
SYNOPSIS flock [-sxon] [-w timeout] lockfile [-c] command... flock [-sxon] [-w timeout] lockdir [-c] command... flock [-sxun] [-w timeout] fd Pass a single command to the shell with -c. The first and second forms wraps the lock around the executing a command, in a manner similar to su(1) or newgrp(1). The third form is convenient inside shell scripts, and is usually used the following manner: ( flock -n 9 || exit 1 # ... commands executed under lock ... ) 9>/var/lock/mylockfile $ diff -Nru a/run-one b/run-one --- a/run-one 2013-03-04 18:02:15.513983439 -0500 +++ b/run-one 2013-03-05 15:27:46.635948096 -0500 @@ -32,14 +32,15 @@ mkdir -p "$DIR" # Calculate the hash of the command and arguments +CMD="$@" CMDHASH=$(echo "$@" | md5sum | awk '{print $1}') FLAG="$DIR/$CMDHASH" # Handle run-this-one invocation, by killing matching process first case "$(basename $0)" in run-one) - # Run the specified commands, assuming we can flock this command string's hash - flock -xn "$FLAG" "$@" + # Run the specified command, assuming we can flock this command string's hash + flock -xn "$FLAG" -c "$CMD" ;; run-this-one) ps="$@" @@ -58,15 +59,15 @@ pid=$(lsof "$FLAG" | awk '{print $2}' | grep "^[0-9]") || true [ -z "$pid" ] || kill $pid sleep 0.1 - # Run the specified commands, assuming we can flock this command string's hash - flock -xn "$FLAG" "$@" + # Run the specified command, assuming we can flock this command string's hash + flock -xn "$FLAG" -c "$CMD" ;; keep-one-running) backoff=1 while true; do - # Run the specified commands, assuming we can flock this command string's hash + # Run the specified command, assuming we can flock this command string's hash set +e - flock -xn "$FLAG" "$@" + flock -xn "$FLAG" -c "$CMD" if [ "$?" = 0 ]; then # Last run finished successfully, reset to minimum back-off of 1 second backoff=1 ** Patch added: "run-one.patch" https://bugs.launchpad.net/run-one/+bug/1145461/+attachment/3559045/+files/run-one.patch -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1145461 Title: add "-c" to flock call so variables get passed to command executed by run-one To manage notifications about this bug go to: https://bugs.launchpad.net/run-one/+bug/1145461/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs