PEXC - sszefoglal
Bevezet
A pexec program alapfeladata egy megadott parancs s/vagy shell-szkript futtatsa prhuzamostott krnyezetben. A programmal egyszeren lehet a megszokott, szkripteknl hasznlatos eszkzket (ciklusszervezs, tirnytsok, pipe-ok, formzs) kombinlni a prhozamos futtats adta elnykkel. A programnak alapjban 3 fajta hasznlati mdja lehet:
Egy adott parancs s/vagy szkript futtatsa a loklis gpen, kihasznlva a gpben lev tbb prosszeszor(mag)ot. Ehhez a pexec programon kvl tovbbi specilis elrendezs (egyb program, hlozati konfigurci) nem szksges. Ebben a mdban a prhozamosts a
for variable in <set> ; do <command> ; doneciklushoz hasonlan fut le, amennyiben a ciklusszervezst lecserljk a megfelel pexec-hvsra. Az egyedi illetve az sszestett kimenetek trnytsa (file-okba, pipe-okba) s tformzsa is megoldhat, ezutbbira a kimenetek potencilis keveredse miatt lehet szksg.
Egy adott parancs s/vagy szkript futtatsa tvoli gpeken, egy remote shell segtsgvel. Ebben a mdban a pexec programon kvl szksg van egy shell-re, ami a tvoli gpekre a bejelentkezst, autentikcit s az egyedi programok vgrehajtst vgzi (gyakorlatban ez az ssh, gy garantlt a hlzati forgalom biztonsga is). Ebben a mdban az egyedi parancsok minden egyes tvoli gpen, egy pldnyban futnak le. A kimenetek tirnytsa s tformzsra az elz esethez hasonlan szintn van lehetsg.
Egy adott parancs s/vagy szkript futtatsa loklis s tvoli gpeken, gy hogy a futtatand parancsot minden egyes gpre ki lehet osztani. A hlzati forgalom tirnytst, bejelentkezst s autentikcit itt is egy remote shell (ssh) ltja el, ezentl azonban minden egyes gpen rendelkezsre kell llnia a pexec programnak, mely a loklis elosztst s tirnytsokat kezeli le, valamit persze a megfelel parancsokhoz szksges egyedi programoknak is rendelkezsre kell llnia, egymssal klcsnsen ekvivalens mdon (hiszen egyrszt semmi nem garantlja hogy a parancs egy adott pldnya melyik gpen is fog lefutni, msrszt a kioszts sorrendje fgg a pillanatnyi terhelstl is).
A fenti funkcionalitsokat ki lehet egszteni (mind loklis, mind tvoli futtatsok esetn, azaz az sszes futtatsi mdban) egyfajta tvirnytssal is. Ekkor a (vezrl)program hlzati vagy UNIX domain socketen keresztl vezrelhet. A vezrls a kvetkezket takarja:
A vezrlst lehet "kzzel" is csinlni (netcat vagy socket vagy valami hasonl programmal), azonban a fenti feladatok kzvetlenl a pexec program tvvezrl mdban trtn indtsval egyszeren megvalsthatak (transzparensen is, azaz tvoli gpeken val eloszott futtatsnl automatikusan trtnik a vezrls tadsa).
- a pillanatnyi sttusznak, azaz: a futtatand feladatok szmnak, mr elvgzett s/vagy fggben lev feladatok szmnak lekrdezse;
- klcsns kizrs (mutual extension-ok, mutex-ek) megvalstsa, zrols (lock) illetve a zrolsok elengedse (unlock);
- file-ok kiiratsa illetve file-ba val ments, klcsnsen kizrtmdon;
- atomi, azaz klcsnsen kizrt parancsok indtsa.
Rszletes lers, specifikci
Egyelre csak angolul, lsd itt: pexec.1.html.Pldk
Identikus futtats:Amennyiben semmilyen opcit nem adunk meg, csak az indtand parancsot (s azok argumentumait), a pexec program egyszeren elindtja a programot, a helyi gpen, egy pldnyban -- mintha nem is lenne a pexec az adott parancshvs eltt:Nhny szm ngyzetgyknek kiszmtsa:pexec ssh -X -l user hostAz albbi hvs a bc program segtsgvel kiszmtja az 1 s 10 kztti egsz szmok ngyzetgykt (10000 tizedesjegyre) s az eredmnyt egyedi fileokba (sqrt-1.dat, ..., sqrt-10.dat) irnytja t:File-ok tartalmnak sorbarendezse:pexec -o sqrt-%s.dat -r `seq 10` -e NUM -n 4 -c 'echo "scale=10000;sqrt($NUM)" | bc'A fenti hvs a futtatsokat 4 szlra (-n 4) bontja szt, a gpben lev processzorok/magok szmtl fggetlenl. Az egyes konkrt szm-rtkeket a NUM krnyezeti vltoz segtsgvel adja t a futtatand echo | bc pipeline-nak. Ez a hvs teht egyenrtk afor NUM in `seq 10` ; do echo "scale=10000;sqrt($NUM)" | bc >sqrt-$NUM.dat doneshell-ciklussal.Az albbi plda a megadott file-ok sorait egyenknt sorbarendezi, a kimenetet a *.sort file-okba trolja el:PNG tpus kpek JPEG formtumba val konverzija:pexec -r myfiles*.ext -i %s -o %s.sort -- sortA -- elvlaszt csak a knnyebb olvashatsg kedvrt van kirva (azaz hogy a pexec sajt argumentumai illetve a futtatand parancs s/vagy szkript jl elklnthet legyen). Az egyenrtk shell-ciklus:for f in myfiles*.ext ; do sort <$f >$f.sort doneAz albbi kt plda a konverzit rendre az ImageMagick/convert illetve a NetPBM csomag segtsgvel oldja meg:JPEG formtum kpek tmretezse:pexec -r *.png -e IMG -c 'convert $IMG ${IMG%.png}.jpeg'pexec -r *.png -i %s -o %s.jpeg -c 'pngtopnm | pnmtojpeg'Az elbbi esetben a bels shell-parancs lecserli a kiterjesztst png-rl jpeg-re, mg az utbbi esetben a *.jpeg kiterjesztst a mr meglev teljes file-nvhez hozzbiggyeszti (gy a kimeneti filok kiterjesztse *.png.jpeg lesz).Az albbi plda az tmretezsen tl demonstrlja a klcsnsen kizrt file-ba rs/olvass megvalstst is. ltalban ez akkor hasznos, ha a sok processzoron (illetve tbb tvoli gpen) dolgozunk egyszerre s az egyes futtatsok ugyanarrl a httrtrolrl dolgoznak. Ebben az esetben ugyanis a prhuzamos terhels nagyon lelasstja a futtatsokat (random elrs, sok I/O wait, ...). A pldban mind az rs mind az olvass egy-egy mutex segtsgvel blokkolhat olyan szintre, hogy egyszerre csak egy szl frhet hozz a diszkhez.Rendszerfrissts tbb gpen:pexec -n 8 -r *.jpg -y unix -e IMG -c \ 'pexec -j -m blockread -d $IMG | \ jpegtopnm | pnmscale 0.5 | pnmtojpeg | \ pexec -j -m blockwrite -s th_$IMG'A plda kt mutex-et hasznl, a blockread s a blockwrite nevezett. E kett garantlja, hogy egyszerre csak egy szl olvasson illetve rjon a diszkre. Amennyiben az rs s az olvass is ki kell, hogy zrja egymst, ugyanazt a mutex-et kell megadni az olvass s az rs sorn egyarnt.Az albbi plda egy egyszer frisstst (Debian alatt, apt-get -y upgrade) mutat be, egyszerre tbb gpen:pexec -n alpha,beta,gamma,delta apt-get -y upgradeA fenti plda a parancsot prhuzamosan lefuttatja az alpha, beta, gamma valamint a delta nevezet gpeken. Ahhoz, hogy a fenti prhuzamostott parancs kavarods nlkl lefusson, a remote shell-en (ssh-n) keresztli bejelentkezsnek s autentikcinak interaktivits-mentesnek kell lennie. Amennyiben iterakcira van szksg (pl. jelsz megadsra), a remote shell blokkolni fogja a futtatst, amg a jelszt/jelszavakat meg nem adjuk. Mivel a standard input-ot minden egyes szl rkli, a jelsz megadsa is sszekeveredhet az egyes gpek esetben.