TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #575 643
flock: защита от повторного запуска скрипта

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

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

В результате появляются дублирующиеся процессы, конфликты при работе с файлами и непредсказуемые ошибки.

▪️Типичная ошибка

Допустим, скрипт выполняется 10 минут, а cron запускает его каждые 5:

*/5 * * * * /opt/backup.sh


Через некоторое время одновременно будут работать сразу несколько экземпляров.

▪️Решение через flock
Самый простой вариант - добавить блокировку:

flock -n /tmp/backup.lock /opt/backup.sh


Если lock-файл уже занят другим процессом, новая копия просто не запустится.

Ключ -n означает “не ждать освобождения блокировки”.

▪️Использование внутри скрипта

Можно защитить сам скрипт независимо от способа запуска:

exec 200>/var/run/myjob.lock

flock -n 200 || {
echo "Already running"
exit 1
}


Теперь второй экземпляр завершится сразу после старта.

▪️Чем лучше PID-файлов
Многие делают так:

echo $$ > /tmp/script.pid


Но после аварийного завершения PID-файл может остаться, а PID уже будет принадлежать другому процессу.
flock работает через файловые дескрипторы ядра и автоматически освобождает блокировку при завершении процесса.

▪️Где особенно полезно
Бэкапы, синхронизация файлов, обработка очередей, обновление данных, cron-задачи и любые скрипты, которые нельзя запускать параллельно.

BashTex 📱 #scripts #flock
  • 👍 8
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →