Проблема с созданием файла «блокировки», как предлагалось в предыдущем решении, заключается в том, что файл блокировки может уже существовать, если скрипт, ответственный за его удаление, завершается ненормально.Это может произойти, например, если пользователь завершает процесс rsync или из-за сбоя питания.Вместо этого следует использовать <a href="http://linux.die.net/man/1/flock" rel="noreferrer">flock</a>
, который не страдает от этой проблемы.
Поскольку это происходит, flock также прост в использовании, поэтому решение будет выглядеть просто так:
flock -n lock_file -c "rsync ..."
Команда после опции -c
выполняется только в том случае, если в файле lock_file нет другой блокировки процесса.Если процесс блокировки по какой-либо причине завершается, блокировка будет снята с файла lock_file.Опции -n
говорят, что flock должен быть неблокирующим, поэтому, если есть другие процессы, блокирующие файл, ничего не произойдет.