use flock to ensure only one instance of a shell script is running

1
2
3
4
5
6
7
8
script=$(realpath "$0")
lock_file="${script%.*}.lock"
(
flock -n 9 || exit 1
sleep 10 && echo 'Done!'
) 9> "$lock_file" && rm "$lock_file"

References:

  • Unix manual flock(1)