Eingangs hatte ich ja Zwei Probleme
1) Sonderzeichen wurden bei lokaler Ausfürung nicht richtig Verarbeitet.
2) Soballt ssh ins spiel kam wurde die Job Datei nicht weiter verarbeitet.
Problem 1 ist gelöst ich habe die Funktion excutlocal wie folgt angepasst
function excutlocal {
eval "$@" >>$LOG
if [ "$?" != "0" ]; then
echo "Fehler bei $1" >>$LOG
return 1
fi
return 0
}
Problem 2 henkt offensichtlich damit zusammen das ich die Datei vom Standard Eingabe Kanal einlese und in der schleife in der sie verarbeitet wird ssh aufrufe was den Standard Eingabe Kanal offensichtlich umlenkt.
Ich habe versucht das Problem zu umgehen und die Datei auf einen andrem Descriptor geöffnet. Zunächst funktioniert das auch jedoch wenn die Datei zum zweitenmal gelesen werden soll, scheint es so als sei sie lehr. BZW es sieht so aus als ab am Ende der Datei gelesen werde würde.
function excutecmd {
# 1 PRE oder AFTER
exec 3<$TMPJOB
declare -i n=0
declare -i START=0
declare -i STOP=0
case $1 in
PRE) echo "Starte vor Beckup Komandos" >>$LOG
START=$(grep -m 1 -n PRECMDSTART $TMPJOB | cut -d : -f 1)
STOP=$(grep -m 1 -n PRECMDSTOP $TMPJOB | cut -d : -f 1)
while read line <&3
do
n=`expr $n + 1`
if [ $n -gt $START -a $n -lt $STOP ]; then
if [ "$CMDHOST" != "localhost" ]; then
excuteremote "$line" || isterror
else
excutlocal "$line" || isterror
fi
fi
done
exec 3>&-
echo "Vor Beckup Komandos erfolgreich beendet" >>$LOG
;;
AFTER) echo "Start nach Beckup Komandos" >>$LOG
START=$(grep -m 1 -n AFTERCMDSTART $TMPJOB | cut -d : -f 1)
STOP=$(grep -m 1 -n AFTERCMDSTOP $TMPJOB | cut -d : -f 1)
while read line
do
n=`expr $n + 1`
if [ $n -gt $START -a $n -lt $STOP ]; then
if [ "$CMDHOST" != "localhost" ]; then
excuteremote "$line" || isterror
else
excutlocal "$line" || isterror
fi
fi
done
exec 3>&-
echo "Nach Backup Komandos erfolgreich" >>$LOG
;;
*) echo "function execute wurde falsch aufgerufen" >>$LOG
return 1
esac
}
Alles anzeigen
+ '[' 17 -gt 6 -a 17 -lt 11 ']'
+ read line
+ exec
+ echo 'Vor Beckup Komandos erfolgreich beendet'
+ for i in '"checkoption $@"' checkjob getsource getdest getexclude getcmdhost checkcmdhost '"excutecmd PRE"' dobackup '"excutecmd AFTER"'
+ dobackup
+ sleep 10
+ for i in '"checkoption $@"' checkjob getsource getdest getexclude getcmdhost checkcmdhost '"excutecmd PRE"' dobackup '"excutecmd AFTER"'
+ excutecmd AFTER
+ exec
+ declare -i n=0
+ declare -i START=0
+ declare -i STOP=0
+ case $1 in
+ echo 'Start nach Beckup Komandos'
++ grep -m 1 -n AFTERCMDSTART /tmp/backup-job-1297533833
++ cut -d : -f 1
+ START=12
++ grep -m 1 -n AFTERCMDSTOP /tmp/backup-job-1297533833
++ cut -d : -f 1
+ STOP=17
+ read line
Alles anzeigen
Das Script bleibt dann einfach bei read Line stehen