Hallo. Jeg har et scripting søket at jeg stumped på som jeg håper du kan hjelpe med.
I utgangspunktet har jeg en ksh script som kaller en prosess for å lage
n antall binære filer. Disse filene har en maksimal størrelse på 1 GB. Prosessen kan skrive
n antall filer samtidig (parallell operasjon) basert på paralellisation parameter matet inn i helt i starten. Normalt ville vi vente til denne prosessen er fullført og deretter gzip alle filene enkeltvis (gzip *. dmp for eksempel). Men på enkelte systemer vi ikke har nok diskplass til å vente til alle 1GB filer har blitt produsert.
Jeg har tidligere skrevet noen kode til gzip filene parallelt (se nedenfor), men jeg nå må gzip dem i parallell, mens den første prosessen kjøres. Jeg må være forsiktig med å forsøke å gzip filer øyeblikket skriftlig (opptil
n fra parallelle kommando), så en slags looping vil være nødvendig. Og jeg ønsker å opprettholde muligheten for parallell gzip hvis mulig.
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