Авторский канал для тех, кто хочет глубже погрузиться в мир Linux.
Подойдет для разработчиков, системных администраторов и DevOps
Реклама: @dad_admin
Post #575
643
flock: защита от повторного запуска скрипта
Одна из самых неприятных проблем в автоматизации - случайный запуск нескольких копий одного скрипта.
Например, cron запускает задачу каждые 5 минут, но одна из прошлых итераций ещё не завершилась.
В результате появляются дублирующиеся процессы, конфликты при работе с файлами и непредсказуемые ошибки.
▪️Типичная ошибка
Допустим, скрипт выполняется 10 минут, а cron запускает его каждые 5:
▪️Решение через flock
Самый простой вариант - добавить блокировку:
Ключ
▪️Использование внутри скрипта
Можно защитить сам скрипт независимо от способа запуска:
▪️Чем лучше PID-файлов
Многие делают так:
▪️Где особенно полезно
Бэкапы, синхронизация файлов, обработка очередей, обновление данных, cron-задачи и любые скрипты, которые нельзя запускать параллельно.
BashTex 📱 #scripts #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


