Hej. Jeg har et scripting query, at jeg stumped på som jeg håber du kan hjælpe med.
Grundlæggende har jeg en ksh script, der kræver en proces for at skabe
n antallet af binære filer. Disse filer har en maksimal størrelse på 1 GB. Processen kan skrive
n Antallet af filer på en gang (parallel drift) baseret på paralellisation parameter indgå i script i starten. Normalt ville vi vente på denne proces for at færdiggøre og derefter gzip alle filer enkeltvis (gzip *. DMP f.eks). Men på nogle systemer, vi har ikke nok diskplads til at vente, indtil alle 1GB filer er blevet produceret.
Jeg har tidligere skrevet nogle kode til gzip filerne parallelt (se nedenfor), men jeg er nu nødt til at gzip dem parallelt, mens den første proces kører. Jeg har brug for at være omhyggelig med ikke at forsøge at gzip nogen filer øjeblikket skrevet (op til
n fra parallel kommando), så en slags looping vil være påkrævet. Og jeg ønsker at fastholde muligheden for parallel gzip, hvis muligt.
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