Утилита flock представляет собой мощный инструмент в Unix-подобных операционных системах, позволяющий контролировать запуск только одной копии процесса или скрипта в определённый момент времени. Это особенно полезно в ситуациях, когда одновременный запуск нескольких экземпляров одного и того же процесса может привести к конфликтам или ошибкам, например, при доступе к общим файлам или ресурсам.
flock работает, блокируя файл или каталог, что предотвращает одновременный запуск нескольких экземпляров скрипта или программы. Когда скрипт запускается, он пытается "заблокировать" указанный файл. Если файл уже заблокирован другим процессом, новый процесс будет ожидать (или завершится, если задан соответствующий флаг), пока блокировка не будет снята.
1. Базовый Пример:
#!/bin/bash ( flock -n 200 || exit 1 # ... команды скрипта ... ) 200>/var/lock/mylockfile
В этом примере скрипт пытается установить неблокирующую блокировку на файл /var/lock/mylockfile. Если файл уже заблокирован, скрипт немедленно завершится.
2. Ожидание Освобождения Блокировки:
#!/bin/bash ( flock -s 200 # ... команды скрипта ... ) 200>/var/lock/mylockfile
Здесь скрипт будет ожидать освобождения блокировки файла `/var/lock/mylockfile`, если он уже заблокирован.
3. Использование в Командных Пайплайнах:
flock /var/lock/mylockfile -c 'команда'
Эта команда позволяет использовать flock непосредственно в командной строке для выполнения одиночной команды с блокировкой.
flock может быть использована в различных сценариях, таких как предотвращение одновременного выполнения задач cron, управление доступом к общим ресурсам в скриптах оболочки и даже в более сложных сценариях, связанных с сетевыми операциями и многопоточностью.
10 01 * * 5 /usr/bin/flock -xn /var/lock/import.lock -c 'sh /root/import.sh'
Вместе с запуском скрипта, создаётся .lock файл, который остаётся заблокирован, пока скрипт будет работать. Как только скрипт завершает свою работу, блокировка с файла снимается, и новый процесс может быть вновь запущен в системе.
Утилита flock является незаменимым инструментом для контроля за запуском процессов в Unix-подобных системах. Её гибкость и простота использования делают её идеальным выбором для множества задач, связанных с синхронизацией процессов и безопасным доступом к ресурсам.
Таким образом, flock предоставляет эффективное средство для управления одновременным выполнением процессов и скриптов, повышая надёжность и стабильность системных и пользовательских операций.