Hallo. Ik heb een scripting query die ik stumped waarvan ik hoop dat u kan helpen met.
Eigenlijk heb ik een ksh script dat vraagt een proces voor het creëren
n aantal binaire bestanden. Deze bestanden hebben een maximale grootte van 1Gb. Het proces kan schrijven
n aantal bestanden in een keer (parallelle bediening) op basis van de paralellisation parameter ingebracht in het script aan het begin. Normaal zouden we wachten tot dit proces te voltooien en dan gzip alle bestanden afzonderlijk (gzip *. dmp bijvoorbeeld). Maar op sommige systemen we hebben niet genoeg ruimte op de vaste schijf te wachten totdat alle 1Gb bestanden zijn geproduceerd.
Ik heb eerder geschreven code te gzip bestanden in parallel (zie hieronder), echter heb ik nu behoefte aan gzip ze parallel terwijl het eerste proces wordt uitgevoerd. Ik moet oppassen niet te proberen om alle bestanden gzip momenteel geschreven (tot
n van de parallelle commando), dus een soort lus zal worden geëist. En ik wil de optie van parallelle gzip indien mogelijk.
Code:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`
do
if [[ ${started} -lt ${threads} ]]; then
let started=started+1
echo "gzip ${filename}"
( $GZIPCMD ${filename} ) &
list_of_pids="${list_of_pids} $!"
else
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
started=0
fi
done
}
...
my_binary_file_creation_process
...
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
gzip_func
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
done
Kan iemand me helpen schrijven sommige code voor dit met behulp van standaard Solaris 8/9/10 tools met behulp van de Korn shell.
Perl commando's mogelijk moet zijn (vers 5.6.1 geïnstalleerd).
Veel dank en vriendelijke groet,
Stephen.