[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bash Hintergrundprozesse


Am Samstag, 10. Dezember 2005 03:10 schrieb Juergen Unger:

> > Doch wie kann ich erreichen, dass der Test in "if" erst
> > ausgefuehrt wird, wenn sowohl qsum als auch zsum fertig
> > berechnet sind?
>
> mit dem Shell-Cmd 'wait' geht das:
> | cksum ${quelle} > quelle.chk &
> | cksum ${ziel} > ziel.chk &
> |
> | wait
> |
> | qsum=$(cat quelle.chk)
> | zsum=$(cat ziel.chk)
> |
> | if [ ${qsum} = ${zsum} ]; then
> |   echo "OK"
> | else
> |   echo "FEHLER"
> | fi

Danke Juergen, wait ist genau das richtige!

Danke auch fuer deine Korrektur, mit der du mich darauf aufmerksam
gemacht hast, dass mein Ausdruck    qsum=$(cksum $quelle) &
nicht als Hintergrundprozess funktioniert (warum auch immer)
und daher eine Datei zwischengeschaltet werden muss.

Als Vordergrundprozess funktioniert der Ausdruck aber, ich habe
deshalb beide Varianten im Skript gelassen, dessen getestete
Version ich nachfolgend wiedergebe - fuer alle, die den paranoiden
Weg der Festplattenkopie bevorzugen:

#! /bin/sh
# VORBEREITUNG:
# Rescue-System von CD1 starten (Parameter nicht erforderlich)
# mount /dev/fd0 /media/floppy/
# /media/floppy/kopiefp

quelle=/dev/hde
ziel=/dev/hdg
protokoll=/media/floppy/protokoll.txt

#hdparm -d $quelle
#hdparm -d $ziel

echo "Anschlusstest Quelle $quelle"
dd  if=$quelle of=/dev/null count=10000 || exit 1
echo "Anschlusstest Ziel   $ziel"
dd  if=$ziel of=/dev/null count=10000 || exit 1
echo "Gut, die Festplatten sind richtig angeschlossen."
echo "Jetzt wird die Festplatte kopiert und geprueft."
echo "Die Meldungen werden auf den Bildschirm UND"
echo "auf Diskette geschrieben, daher kann der Bildschirm"
echo "ausgeschaltet werden."
echo "Bei fehlerfreiem Ende wird der Rechner heruntergefahren."
echo ""
echo "Voraussichtliche Zeitdauer, DMA:     aus   ein   ein/parallel"
echo ""
echo "                          kopieren:  2:30  0:37  0:37"
echo "                          pruefen a: 1:31  0:26  0:24"
echo "                          pruefen b: 1:31  0:26  0:28"
echo "                              Summe: 5:33  1:25  1:05"
echo ""
echo $(date -I;date +%T) | tee -a $protokoll

dd  if=$quelle of=$ziel bs=1M #Zeile auskommentieren, um Fehlererkennung zu testen

echo $(date -I;date +%T) | tee -a $protokoll

md5sum $quelle > quelle.chk &
zsum=$(md5sum $ziel)
wait
qsum=$(cat quelle.chk)

echo $(date -I;date +%T) | tee -a $protokoll

echo $qsum | tee -a $protokoll
echo $zsum | tee -a $protokoll
qsum=${qsum%%/*}
zsum=${zsum%%/*}
#echo $qsum | tee -a $protokoll
#echo $zsum | tee -a $protokoll

if [ "$qsum" = "$zsum" ]; then
    echo "                                                      OK" | tee -a $protokoll
 echo "" | tee -a $protokoll
 shutdown -h now
else
 echo -e "                                                      FEHLER #################\a" | tee -a $protokoll
 echo "" | tee -a $protokoll
 exit 1
fi

-- 
Viele Gruesse
Werner Holtfreter