Re: Bash Hintergrundprozesse

Autor: Werner Holtfreter <Holtfreter_at_gmx.de>
Datum: 14.12.2005
Am Samstag, 10. Dezember 2005 03:10 schrieb Juergen Unger:

> > Doch wie kann ich erreichen, dass der Test in "if" erst
> > ausgeführt 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 Jürgen, wait ist genau das richtige!

Danke auch für 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 - für 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 Grüße
Werner Holtfreter
Received on Wed Dec 14 01:05:13 2005

Dieses Archiv wurde generiert von hypermail 2.1.8.
Zurück zur UUGRN-Homepage.