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