Kontrola jedinecnosti procesu
Martin Mačok
martin.macok na underground.cz
Pátek Říjen 20 09:27:44 CEST 2000
On Fri, Oct 20, 2000 at 08:07:48AM +0200, Mikulas Gangur wrote:
> Dobry den,
>
> dekuji vsem za pomoc. Nakonec jsem to vyresil nasledujicim zpusobem a
> chodi to.
>
>
> ...
> TMP=lock.$$
> LOCK=lock
> ....
>
> > if [ -f $LOCK.* ]; then
(A)
> > $ECHO "$IDENT: $PROGRAM jiz bezi"
> > exit
> > fi
> >
> > trap "$RM -f $TMP; trap 0; exit 1" 1 2 3 15
> > trap "$RM -f $TMP; exit 0" 0
(B)
> > $CAT /dev/null > $TMP
A co kdyz se nejakym nedopatrenim (murphy) pusti ty 2 instance toho
skriptu temer zaroven a potkaji se v sekci mezi A a B, tedy ani jedne
neuspeje test pred A, tedy oba pokracuji za B a nepoznaji, ze byly
spusteny zaroven. Rika se tomu race conditions (cesky casove zavisle
chyby (ulitaci tomu rikaji rasove podminky)) a je to jeden z duvodu,
proc jsem v puvodnim prispevku pouzil mkdir || exit.
bye
P.S. Pokud se vam to nechce psat, tak se kouknete do
/etc/rc.d/init.d/functions (alespon u Red Hata) a pouzijte to. Staci na
zacatek skriptu pripsat
. /etc/rc,d./init.d/functions
a pak uz muzete ty funkce ve skriptu pouzivat. Jine reseni muze byt
pouziti setlock z daemontools (http://cr.yp.to/), jak me v soukromem
emailu upozornil Petr Novotny.
--
< Martin Mačok .-= martin.macok na underground.cz =-. < iso-8859-2 >
\\. http://kocour.ms.mff.cuni.cz/~macok/ http://underground.cz/ .//
\\\.. `-= t.r.u.s.t n.0 o.n.e =-' ..///
Další informace o konferenci Linux