[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk



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	roam@ringlet.net roam@FreeBSD.org p.penchev@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,

Attachment: signature.asc
Description: Digital signature


Reply to: