I have a bash script that may be invoked multiple times simultaneously. To protect the state information (saved in a /tmp file) that the script accesses, I am using file locking like this:
do_something() { ... } // Check if there are any other instances of the script; if so exit exec 8>$LOCK if ! flock -n -x 8; then exit 1 fi // script does something... do_something Now any other instance that was invoked when this script was running exits. I want the script to run only one extra time if there were n simultaneous invocations, not n-times, something like this:
do_something() { ... } // Check if there are any other instances of the script; if so exit exec 8>$LOCK if ! flock -n -x 8; then exit 1 fi // script does something... do_something // check if another instance was invoked, if so re-run do_something again if [ condition ]; then do_something fi How can I go about doing this? Touching a file inside the flock before quitting and having that file as the condition for the second if doesn't seem to work.
--waitfor the lock, andexec $0if flock fails?