Я бы порекомендовал использовать команду run-one - намного проще, чем иметь дело с блокировками. Из документов:
run-one - это скрипт-обертка, который запускает не более одного уникального экземпляра некоторой команды с уникальным набором аргументов. Это часто полезно с cronjobs, когда вы хотите, чтобы одновременно работало не более одной копии.
run-this-one точно такой же, как и run-one, за исключением того, что он будет использовать pgrep и kill для поиска и уничтожения любых запущенных процессов, принадлежащих пользователю и соответствующих целевым командам и аргументам. Обратите внимание, что run-this-one будет блокироваться при попытке уничтожить соответствующие процессы, пока все соответствующие процессы не будут мертвыми.
run-one-постоянно работает точно так же, как run-one, за исключением того, что он вызывает «COMMAND [ARGS]» каждый раз, когда выходит из команды COMMAND (ноль или не ноль).
keep-one-running - это псевдоним для run-one-постоянно.
run-one-till-success работает точно так же, как run-one-постоянно, за исключением того, что она вызывает «COMMAND [ARGS]» до тех пор, пока COMMAND не завершится успешно (то есть выйдет из нуля).
run-one-till-fail работает точно так же, как run-one-постоянно, за исключением того, что он вызывает «COMMAND [ARGS]» до тех пор, пока COMMAND не завершится с ошибкой (то есть выйдет с ненулевым значением).