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:

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).

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:
	pexec ssh -X -l user host
	
Nhny szm ngyzetgyknek kiszmtsa:
Az 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:
	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 a
	for NUM in `seq 10` ; do 
		echo "scale=10000;sqrt($NUM)" | bc >sqrt-$NUM.dat
	done
	
shell-ciklussal.
File-ok tartalmnak sorbarendezse:
Az albbi plda a megadott file-ok sorait egyenknt sorbarendezi, a kimenetet a *.sort file-okba trolja el:
	pexec -r myfiles*.ext -i %s -o %s.sort -- sort
	
A -- 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
	done
	
PNG tpus kpek JPEG formtumba val konverzija:
Az albbi kt plda a konverzit rendre az ImageMagick/convert illetve a NetPBM csomag segtsgvel oldja meg:
	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).
JPEG formtum kpek tmretezse:
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.
	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.
Rendszerfrissts tbb gpen:
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 upgrade
	
A 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.