flock: не запускать cron-задачу параллельно

Категория: Bash · Язык: Bash · Обновлено:

flock ставит файловую блокировку, чтобы второй cron не начал ту же обработку, пока первый запуск ещё работает. Неблокирующий режим завершает повторный экземпляр сразу, не создавая очередь конкурирующих процессов.

Рабочий пример

Bash
#!/usr/bin/env bash
set -euo pipefail
exec 9>/tmp/report-sync.lock
flock -n 9 || { echo 'already running'; exit 0; }
./sync-report.sh

Блокировка связана с открытым файловым дескриптором и освобождается системой после закрытия процесса. Файл lock может оставаться на диске; его наличие не означает активную задачу.

Частый вопрос

Как ждать освобождения lock?

Уберите -n, чтобы flock ожидал, или добавьте -w секунды для ограничения ожидания. Для cron часто полезнее сразу пропустить дубликат.