пятница, 30 апреля 2010 г.

Лок на выполнение команды в Линуксе.

При организации процесса бекапа контейнеров OpenVZ столкнуся с необходимостью проверки - 'кончился ли предыдущий бекап или он затянулся?'. В образце для FreeBSD, который мне дали, использовался lockf.
Под линь этой утилиты нет, но есть похожая - flock.
Сделал так: в скрипте-обёртке написал
flock -w 0 backup.lock -c "/root/scripts/backup.sh"
Естественно, там всё в виде переменных, но в целом получается такая картина.
Как работает:
Когда обёртка дошла до запуска бекапа - проверяется лок файл.
Если он есть, то обёртка не ждёт (-w 0) и пропускает бекап,
ежели нет - ставил лок и запускает бекап.
И всё одной командой.
Предыдущий мой вариант занял строк 5 ))

Комментариев нет: