On Fri, Nov 22, 2013 at 03:43:47PM +0400, Vladimir Skubriev wrote: > Мне нужно при присоединении определенного диска к серверу выполнять > кое какой скрипт для резервного копирования сервера: > > > SUBSYSTEM=="block", KERNEL=="sd?", ATTRS{vendor}=="ST500DM0", > ATTRS{model}=="02-1BD142" , > RUN+="/usr/local/sbin/customscripts/backups/fullserverbackup.sh > /dev/$name" > > Скрипт срабатвает один раз, т.к. девайс такой только один - с эти > проблем нет. > > Но в самом скрипте я использую следующий код: > > sfdisk -d $SRC_DISK_FOR_MBR_PART_TABLE > /tmp/sfdisk.pt [snip] > > Так вот этот "не хороший" sfdisk вызывает зацикливание, т.е. во > время работы этого скрипта вызывается еще один такой же потом еще > один такой же - т.е. как бы рекурсия получается. [snip] > > Пробовал в начале скрипта сделать условие вида: > > if [ -e /tmp/sfdisk.pt ]; then exit 8888; > else > > # ДАЛЕЕ ВЕСЬ МОЙ КОД СКРИПТА АРХИВИРОВАНИЯ > > fi > > Но не помогает это условие. А почему я не могу понять.
Попробуйте использовать утилиту flock(1) - или из самого правила udev, или из скрипта, как в примере в manpage flock: ( flock -n 9 || exit 0; ...Ваш скрипт... ) 9>/tmp/sfdisk.lock (разумеется, магическая девятка здесь сугубо не магическая, а номер файлового дескриптора, который вероятно не используется шелом) Только в Вашем случае "exit 0", а не 1, потому что будет "нормально", что скрипта запустят дважды. Всего лучшего, Петр -- Peter Pentchev r...@ringlet.net r...@freebsd.org p.penc...@storpool.com PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint 2EE7 A7A5 17FC 124C F115 C354 651E EFB0 2527 DF13 If I had finished this sentence,
signature.asc
Description: Digital signature