Poleciłbym użycie polecenia run-one - o wiele prostsze niż radzenie sobie z blokadami. Z dokumentów:
run-one to skrypt otoki, który uruchamia nie więcej niż jedno unikalne wystąpienie jakiegoś polecenia z unikalnym zestawem argumentów. Jest to często przydatne w cronjobs, gdy nie chcesz, aby działała więcej niż jedna kopia na raz.
run-this-one jest dokładnie tak samo jak run-one, z tym wyjątkiem, że użyje pgrep i kill do znalezienia i zabicia wszelkich uruchomionych procesów należących do użytkownika i dopasowania poleceń i argumentów docelowych. Zauważ, że run-this-one blokuje się podczas próby zabicia pasujących procesów, dopóki wszystkie pasujące procesy nie zostaną zakończone.
run-one-stale działa dokładnie tak, jak run-one, z tym wyjątkiem, że odradza się „COMMAND [ARGS]” za każdym razem, gdy kończy się polecenie COMMAND (zero lub zero).
keep-one-running to alias do ciągłego uruchamiania.
run-one-dopóki-sukces działa dokładnie tak, jak run-one-stale, z tym wyjątkiem, że odradza się „COMMAND [ARGS]”, dopóki COMMAND nie zakończy się pomyślnie (tzn. zakończy zero).
run-one- till -failure działa dokładnie tak, jak run-one-stale, z tym wyjątkiem, że odradza się „COMMAND [ARGS]”, dopóki COMMAND nie zakończy się niepowodzeniem (tzn. zakończy się niezerowo).