In a previous post, I wrote about how you can use the lockfile
command to ensure that only one instance of a script is running at a time. An alternative to lockfile
is the flock
command, which is used as follows:
flock /path/to/mylockfile cmd
By default, if the lock cannot be immediately acquired, flock
will wait indefinitely until it becomes available. However, you can use the --nonblock
(or -n
) flag if you want flock
to fail (with an exit code of 1) rather than wait if the lock cannot be immediately acquired. You can also specify how long flock
should wait by passing in a --timeout
in seconds.
A convenient form of flock
often used within shell scripts is to use a file descriptor, as follows:
( flock -n 9 || exit 1 # ... commands executed under lock ... ) 9>/path/to/mylockfile
If you want to prevent multiple instances of a shell script from running simultaneously, add the following boilerplate at the top of your script, which will cause the script to lock itself automatically on first run:
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" || :
Related posts:
Using "lockfile" to Prevent Multiple Instances of a Script from Running
Retrying Commands in Shell Scripts
Executing a Shell Command with a Timeout
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.