NoPaste

rsync Skript

von MSfree

SNIPPET_TEXT:
  1. #/bin/bash
  2. #=====================================================
  3. # customize SRC, DSTDIR, HTMLLOGDIR, PREFIX:
  4. #
  5. #  SRC = Hostname und Freigabename der Quelle
  6. SRC=quellrechner::pub
  7.  
  8. #  DSTDIR = Vereichnis, unter dem die Backups auf dem Ziel angelegt werden
  9. DSTDIR=/volume1/backup
  10.  
  11. #  HTMLLOGDIR = Vereichnis, unter dem die Logs auf dem Ziel angelegt werden
  12. HTMLLOGDIR=/volume1/RSyncLog
  13.  
  14. #  PREFIX: "Vorsilbe", die den täglichen Unterverzeichnisnamen vorgehängt wird
  15. PREFIX=daily
  16.  
  17. #=====================================================
  18. # automatische Variablen, keine Anpssung nötig
  19. #=====================================================
  20. DATE=`date +%d.%m.%y`
  21. DST=$DSTDIR/$PREFIX-$DATE
  22. BUS=$DSTDIR/.running-$DATE
  23. LOG=$DSTDIR/log/log-$DATE.log
  24. HTMLLOG=$HTMLLOGDIR/log-$DATE.html
  25. PREV=`ls -rtd $DSTDIR/$PREFIX-* 2> /dev/null | tail -1`
  26.  
  27. #=====================================================
  28. # anlegen der Ausgabeverzeichnisse
  29. #=====================================================
  30. if test ! -d $DSTDIR
  31. then
  32.   mkdir $DSTDIR
  33. fi
  34.  
  35. if test ! -d $DSTDIR/log
  36. then
  37.   mkdir $DSTDIR/log
  38. fi
  39.  
  40. if test ! -d $HTMLLOGDIR
  41. then
  42.   mkdir $HTMLLOGDIR
  43. fi
  44.  
  45. #=====================================================
  46. # prüfen, ob rsync mit --link-dest laufen soll
  47. #=====================================================
  48. if test -z "$PREV"
  49. then
  50.   HARDLINK=""
  51. else
  52.   HARDLINK=--link-dest=$PREV
  53. fi
  54.  
  55. #=====================================================
  56. # Kopf der Logdate erzeugen
  57. #=====================================================
  58. CURRENTTIME=`date -u`
  59. echo "================================================"  > $LOG
  60. echo "Started at       " $CURRENTTIME                   >> $LOG
  61. echo "================================================" >> $LOG
  62. echo "Fetching from    " $SRC                           >> $LOG
  63. echo "Storing at       " $DST                           >> $LOG
  64. echo "Hardlinking from " $PREV                          >> $LOG
  65. echo "================================================" >> $LOG
  66.  
  67. #=====================================================
  68. # rsync aufrufen und bei Fehler neu starten
  69. # die Sicherung wird hier erstmal in ein temporäres
  70. # Verzeichnis geschrieben
  71. #=====================================================
  72. while ! \
  73.   rsync -av $HARDLINK $SRC $BUS >> $LOG  2>&1
  74. do
  75.   sleep 60
  76. done
  77.  
  78. #=====================================================
  79. # Sicherungsverzechnis in endgültigen Namen umbenennen
  80. # und mit touch auf die aktuelle Uhrzeit setzen
  81. #=====================================================
  82. mv $BUS $DST
  83. touch $DST
  84.  
  85. #=====================================================
  86. # Ende der Logdate erzeugen
  87. #=====================================================
  88. CURRENTTIME=`date -u`
  89. echo "================================================" >> $LOG
  90. echo "Finished at      " $CURRENTTIME                   >> $LOG
  91. echo "================================================" >> $LOG
  92.  
  93. #=====================================================
  94. # Logdate HTML umsetzen, damit man sie leichter in
  95. # einem Browser lesen kann.
  96. #=====================================================
  97. awk '
  98. BEGIN {
  99.  print "<!DOCTYPE html>"
  100.  print "<html>"
  101.  print "  <head>"
  102.  print "  <meta charset="UTF-8">"
  103.  print "  <title>TimAchine Backup Log</title>"
  104.  print "  </head>"
  105.  print "  <body>"
  106. }
  107. {
  108.  print "    "$0"<br>"
  109. }
  110. END{
  111.  print "  </body>"
  112.  print "</html>"
  113. }' $LOG > $HTMLLOG
  114.  
  115. #=====================================================
  116. # originale Logdate komprimieren, um Platz zu sparen
  117. #=====================================================
  118. gzip -9 $LOG
  119.  

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN