Например, если вы хотите иметь cron
каждую минуту, но хотите запретить многократный запуск сценария, вы можете использовать что-то вроде:
* * * * * lockf -t 0 /tmp/foo.lock /path/to/foo.sh
В этом случае lockf
создаст файл блокировки /tmp/foo.lock
и автоматически удалит его при выходе.
Опция -t 0
предотвращает создание слишком большого количества lockf
процессов, его можно прочитать как ждать N секунд, пока блокировка не удалить или выйти , если -t N
не указан lockf
будет ждать бесконечно.
От lockf man :
-t seconds Specifies a timeout for waiting for the lock. By default,
lockf waits indefinitely to acquire the lock. If a timeout
is specified with this option, lockf will wait at most the
given number of seconds before giving up. A timeout of 0 may
be given, in which case lockf will fail unless it can acquire
the lock immediately. When a lock times out, command is not
executed.
Получив файл блокировки, вы можете проверить его следующим образом:
lockf -t 0 /tmp/foo.lock uname
И получит что-то вроде:
lockf: /tmp/foo.lock: already locked