Zaseknuty skript (long)

Michal Krause michal na krause.cz
Pondělí Srpen 5 12:39:05 CEST 2002


Zdravim,

uz delsi dobu resim takovy zvlastni problem. Mam shellovy skript, ktery
se mi naprosto nahodne zasekava ve stavu R (runnable). Pak uz jenom visi
a zere spoustu procesoroveho casu. Takhle vypada vypis ps axfwl:

040     0   465     1   0   0  1336  116 parseO S    ?          0:43 crond
040     0 22310   465   0   0  1336    0 readv  SW   ?          0:00  \_ [crond]
100    99 22321 22310   0   0  1636    0 parseO SW   ?          0:00  |   \_ [sh]
000    99 22322 22321   0   0  1644    0 parseO SW   ?          0:00  |       \_ [sender]
000    99 22355 22322   0   0  1672    0 readv  SW   ?         10:49  |           \_ [sh]
040    99 25726 22355  15   0  1668   56 -      S    ?        338:19  |               \_ sh -x ./send_it

Skript send_it sestava z generovane sekvence bloku prikazu, z nichz
kazdy vypada presne takto:

if !(~/bin/dt 38976); then
	echo "Chyba ID 38976"
else
	echo emailova_adresa
fi
echo 38976 >>zip_log
zip -9 "$3$2$1.zip" *.htm >>zip_log
rm *.htm
<msg uuenview -b -m "emailova_adresa" -s "`echo "$subject" | \
	/usr/bin/cstocs il2 ascii`" -a "$3$2$1.zip"
mv "$3$2$1.zip" "38976_$3$2$1.zip"

Parametry $3 $2 a $1 jsou rok, mesic a den. Namisto $subject je
jednoradkovy predmet zpravy, v nemz muze byt puvodne cestina, proto je
tam to cstocs.

Kdyz jsem jako interpret pouzil sh -x, je vzdy naposledny zaznamenano

++ echo P: 2 S: 2   Hammer On Air  - statistiky za den 04/08/2002
++ /usr/bin/cstocs il2 ascii

ale pokazde v jinem miste skriptu s jinymi hodnotami. Nejvic me zarazi,
ze to zere tolik procesoru, jako kdyby to uvizlo v nejakem cyklu, ale
jak vidno, nic podobneho tam urcite neni. Ocividne uz nedojde ke
spusteni uuenview, protoze v logu sh -x zaznamenane neni a navic zatez
generuje primo skript send_it, nikoliv neco, co by se z nej spoustelo.
(jak vidno z vypisu ps, send_it uz v danou chvili zadneho potomka nema).
A aby tech podivnosti nebylo dost, kdyz zabiju ten vytuhly proces, zmeni
se jmeno procesu [sh] (ve vyse uveden pripade s PIDem 22355) na
sh -x ./send_it a jede si spokojene dal az do konce.

Jinak receno, zda se, skript sender spusti pomoci
sh -x send_it 2>send_it.err
skript send_it, ktery si pak nekdy zalozi svoji kopii (zrejme pro
spusteni cstocs pres ``?) a ta pak hnije. Alespon tak se mi to jevi, ale
presne priciny se ne a ne dobrat (vsechny povely okolo kritickeho mista
samostatne volane funguji a navic se to sekne pokazde v uplne jinem
bloku povelu s jinymi daty - tam, kde se to dnes zasekne, to zitra po
pregenerovani skriptu send_it nebude mit zadne problemy, to uz jsem
proveril).

Napada nekoho neco?

Diky.

S pozdravem
-- 
Michal Krause                                                       /\
                        Informace (nejenom) ze sveta Linuxu      /\/  \
email: michal na krause.cz _______ http://www.root.cz/ _______ NAVRCHOLU.cz

Vsetci by chceli byt van Goghmi, ale odrezat si ucho ani jeden.
                                                  J. Raz ve filmu Rabaka


Další informace o konferenci Linux