https://pastebin.com/LpdNRssj
Zeile 125
Code: Alles auswählen
rsync
Code: Alles auswählen
rsync
Ich erhebe kein Urheberrecht auf das Skript. Ob du da nu noch was dranhängst, bedarf keiner Genehmigung meinerseits.
Code: Alles auswählen
#/bin/bash
#=====================================================
# customize SRC, DSTDIR, HTMLLOGDIR, PREFIX:
#
# SRC = Hostname und Freigabename der Quelle
SRC=quellrechner::pub
# DSTDIR = Vereichnis, unter dem die Backups auf dem Ziel angelegt werden
DSTDIR=/volume1/backup
# HTMLLOGDIR = Vereichnis, unter dem die Logs auf dem Ziel angelegt werden
HTMLLOGDIR=/volume1/RSyncLog
# PREFIX: "Vorsilbe", die den täglichen Unterverzeichnisnamen vorgehängt wird
PREFIX=daily
#=====================================================
# automatische Variablen, keine Anpssung nötig
#=====================================================
# aktuelles Datum
DATE=`date +%d.%m.%y`
# Zielverzeichnis
DST=$DSTDIR/$PREFIX-$DATE
# temporäres Verzeichnis
BUS=$DSTDIR/.running-$DATE
# Logdateiname
LOG=$DSTDIR/log/log-$DATE.log
# HTML-Logdatei
HTMLLOG=$HTMLLOGDIR/log-$DATE.html
# gestriges Verzeichnis
PREV=`ls -rtd $DSTDIR/$PREFIX-* 2> /dev/null | tail -1`
#=====================================================
# anlegen der Ausgabeverzeichnisse
#=====================================================
if test ! -d $DSTDIR
then
mkdir $DSTDIR
fi
if test ! -d $DSTDIR/log
then
mkdir $DSTDIR/log
fi
if test ! -d $HTMLLOGDIR
then
mkdir $HTMLLOGDIR
fi
#=====================================================
# prüfen, ob rsync mit --link-dest laufen soll
#=====================================================
if test -z "$PREV"
then
HARDLINK=""
else
HARDLINK=--link-dest=$PREV
fi
#=====================================================
# Kopf der Logdate erzeugen
#=====================================================
CURRENTTIME=`date -u`
echo "================================================" > $LOG
echo "Started at " $CURRENTTIME >> $LOG
echo "================================================" >> $LOG
echo "Fetching from " $SRC >> $LOG
echo "Storing at " $DST >> $LOG
echo "Hardlinking from " $PREV >> $LOG
echo "================================================" >> $LOG
#=====================================================
# rsync aufrufen und bei Fehler neu starten
# die Sicherung wird hier erstmal in ein temporäres
# Verzeichnis geschrieben
#=====================================================
while ! \
rsync -av $HARDLINK $SRC $BUS >> $LOG 2>&1
do
sleep 60
done
#=====================================================
# Sicherungsverzechnis in endgültigen Namen umbenennen
# und mit touch auf die aktuelle Uhrzeit setzen
#=====================================================
mv $BUS $DST
touch $DST
#=====================================================
# Ende der Logdate erzeugen
#=====================================================
CURRENTTIME=`date -u`
echo "================================================" >> $LOG
echo "Finished at " $CURRENTTIME >> $LOG
echo "================================================" >> $LOG
#=====================================================
# Logdate HTML umsetzen, damit man sie leichter in
# einem Browser lesen kann.
#=====================================================
awk '
BEGIN {
print "<!DOCTYPE html>"
print "<html>"
print " <head>"
print " <meta charset="UTF-8">"
print " <title>TimAchine Backup Log</title>"
print " </head>"
print " <body>"
}
{
print " "$0"<br>"
}
END{
print " </body>"
print "</html>"
}' $LOG > $HTMLLOG
#=====================================================
# originale Logdate komprimieren, um Platz zu sparen
#=====================================================
gzip -9 $LOG
sync
Wenn das Skript unter dem Benutzer "axel" ausgeführt wird, ist das auch sinnvoll und nötig. Anderenfalls könnte es sein, daß du einige Dateien gar nciht schreiben darfst.
Code: Alles auswählen
--info=progress2
Ja, ich kenne im Prinzip die Optionen, mit denen man den Fortschritt ausgeben kann. Allerdings sind solche Fortschrittsausgaben in meinem Anwendungsfall nicht sinnvoll. Ich lasse das Skript per cron laufen, also im Hintergrund ohne Terminalausgabe, da interessiert mich der Erfolg erst, wenn es fertig ist oder fehlerhaft abgebrochen ist.
Code: Alles auswählen
rsync -av $HARDLINK $SRC $BUS >> $LOG 2>&1
Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Soweit ich das sehe wir dein Progress dennoch in die Datei $LOG geschrieben und erscheint somit nicht auf dem Bildschirm.AxelMD hat geschrieben:31.01.2022 11:29:03Line 79sind da irgendwelche Problem zu erwarten, bzw. weitere Anpassungen vor zu nehmen?Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Der Fortschritt wird normalerweise per stdout auf das Terminal geschrieben. Mit dem ">>" wird diese Ausgabe an die Datei $LOG angehängt.AxelMD hat geschrieben:31.01.2022 11:29:03Line 79sind da irgendwelche Problem zu erwarten,Code: Alles auswählen
rsync -av --info=progress2 $HARDLINK $SRC $BUS >> $LOG 2>&1
Ich glaube, du kannst nur entweder eine Fortschrittsanzeige ausgeben lassen oder ein Log mit Dateinamen, die kopiert wurden.AxelMD hat geschrieben:31.01.2022 12:22:46Was wäre eine gute Lösung, wenn ich den aktuellen Status gerne sehen möchte?
Code: Alles auswählen
tail -f <Logdateiname>