シェルスクリプトを多重起動しないようにする

最初はこう書いていた。

lockfile build.lock
...
rm -f build.lock

だけど、lockfileは失敗した時にデフォルトでは無限にリトライをする。ちょっと出来心で$ for i in {1..100}; do ./foo.sh; done;したから100人の待ち行列が出来てしまった。

やりたかったことは「既に起動していたら続行しないで終了」だったので-r 0でリトライ回数を0にした。

lockfile -r 0 build.lock || exit 1
...
rm -f build.lock