Блокировка в сценарии оболочки

Я хочу написать длинный сценарий оболочки, чтобы одновременно запускать только одну копию. Если сбой сценария, я хочу, чтобы новый вызов скрипта не был остановлен блокировкой из разбитого вызова.

Является ли lockfile-* набором utils правильной вещью? Есть ли вероятность состояния гонки при использовании в скрипте?

--use-pid ли --use-pid ограничение на 5 минут, указанное на странице руководства? Мои скрипты работают значительно дольше.

Я использую экземпляр Ubuntu 10.10 на Amazon EC2; нет NFS или что-то в этом роде.

При создании блокировки можно выполнить команду lockfile или системный вызов flock или создав каталог (который является неотъемлемым действием), вторая часть более сложна.

Если блокировка существует – как вы определяете, если блокировка принадлежит еще запущенному процессу?

Наиболее распространенным решением является включение PID процесса в файл блокировки.

Прежде чем пытаться создать блокировку, вы должны проверить, существует ли файл блокировки. Если да, проверьте, соответствует ли PID выполняемому процессу, который похож на процесс, который должен создать блокировку. Если это не так, удалите блокировку и заново создайте ее.