127просмотров
27 декабря 2025 г.
question📷 ФотоScore: 140
Как гарантировать, что скрипт или команда не запустится дважды? Часто cron запускается повторно, деплой стартует дважды, скрипт пересекается сам с собой. PID-файлы — ненадёжны.
Проверки через ps — гонки. В Linux есть решение — flock.
Запустить команду, только если она ещё не выполняется:
flock -n /tmp/deploy.lock deploy.sh Если блокировка занят, flock завершится с ошибкой, команда не стартует. Для скриптов ещё надёжнее:
exec 9>>/tmp/job.lock
flock -n 9 || exit 1 С этого момента гарантированно: только один экземпляр, блокировка снимается автоматически при exit. 🔥 flock — это advisory-блокировка ядра с атомарной установкой, а не договорённость скриптов. Используйте её для cron, деплоя, миграций, бэкапов и CI-шагов.