Shellscript für rotierende Datensicherung

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Mik, 09.08.2015.

  1. Mik

    Mik Grünschnabel

    Dabei seit:
    09.08.2015
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    ich beschäftige mich erst seit ein paar Wochen mit der Shell und habe mich entschlossen meine ersten Scripterfahrungen in diesem kleinen Projekt zu realisieren.
    Es macht rotierende Datensicherungen von NAS zu NAS.

    rsyncBackupRotate110.sh benötigt 3 Argumente
    rsyncBackupRotate110.sh [Daten-Quelle] [Daten-Ziel] [zuSicherndesVerzeichnis]

    Auf einen Bananapi werden die Netzlaufwerke eingehängt und in der Crontab wird das Script mit 3 Argumenten ausgeführt.

    mount.cifs //xxx.xxx.xxx.xxx/Daten-Quelle /root/Bibliothek -o user=xxx,password=xxx
    mount.cifs //xxx.xxx.xxx.xxx/Daten-Ziel /root/NetBackup -o user=xxx,password=xxx

    Das Script funktioniert in der Shell als auch in der Crontab mit Dateinamen die keine Leerzeichen enthalten.
    rsyncBackupRotate110.sh Bibliothek NetBackup Comics

    Sobald aber Verzeichnisse zu sichern sind, die Leerzeichen enthalten funktioniert das Script nicht mehr richtig.
    rsyncBackupRotate110.sh Bibliothek NetBackup "Adobe Photoshop Styles"

    Mittlerweile weiss ich nicht mehr weiter. Habe alles überprüft, ob die Quote richtig stimmen, die Variablen richtig mit Klammern versehen wurden.
    Ich würde mich sehr freuen, wenn mir jemand einen Tipp geben kann um das Problem zu lösen.

    Vielen Dank
    Mik

    Den Anhang rsyncBackupRotate110.sh.zip betrachten
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 schwedenmann, 09.08.2015
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo

    Dann wär es ev. hilfreich das script zu posten, sollte ja nicht allzu groß sein, anstatt das als zip-datei (malware) anzuhängen:(
    deswegen habe ich es nicht geöffnet, oder runtergelaen:D

    mfg
    schwedenmann
     
  4. Mik

    Mik Grünschnabel

    Dabei seit:
    09.08.2015
    Beiträge:
    5
    Zustimmungen:
    0
  5. #4 schwedenmann, 09.08.2015
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo

    Genau deswegen öffne ich es nichtX(

    warum postest du den Inhalt nicht direkt im thread ?

    mfg
    schwedenmann
     
  6. #5 Mik, 09.08.2015
    Zuletzt bearbeitet: 09.08.2015
    Mik

    Mik Grünschnabel

    Dabei seit:
    09.08.2015
    Beiträge:
    5
    Zustimmungen:
    0
    Für die Zukunft merke ich mir das.

    Besser so?

    Code:
    #!/bin/sh -x
    
    # Script-Name : rsyncBackupRotate
    # Version     : 1.10
    # Autor       : Michael Madej
    # Erstellt    : 25.05.2015
    # Datum       : 09.08.2015
    
    
    # Beschreibung:
    # Rotierende Datensicherung auf Synology Diskstations durch BananaPi
    # Die Vorhaltezeit der Daten betraegt 4 Wochen
    # Datensicherung bis zu 12 Monate
    
    logDatum=$(date +%Y-%m-%d)
    logZeit=$(date +%H-%M-%S)
    exec 2>>"/usr/local/log/${logDatum} ${logZeit} rsyncBackupRotate Debug-Output.txt"
    
    ###############################################################################
    ####    Dokumentation                                                      ####
    ###############################################################################
    
    # rsyncBackupRotate110 benötigt 3 Argumente
    # rsyncBackupRotate110 [Daten-Quelle] [Daten-Ziel] [zuSicherndesVerzeichnis]
    
    # Netzlaufwerke auf BananaPi mit Testdaten
    # mount.cifs //xxx.xxx.xxx.xxx/Daten-Quelle /root/Bibliothek -o user=xxx,password=xxx
    # mount.cifs //xxx.xxx.xxx.xxx/Daten-Ziel /root/NetBackup -o user=xxx,password=xxx
    
    # Beispiel: 
    # rsyncBackupRotate110.sh Bibliothek NetBackup Comics
    
    
    ###############################################################################
    ####    Funktionen                                                         ####
    ###############################################################################
    
    tagesverzeichnisseLoeschen()
    {
    	# loeschen der Tagesverzeichnisse
    	echo "\nDie Tagesverzeichnisse von Montag bis Sonntag von ${backupVerzeichnis} werden geloescht: `date`" >> $logfileName
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T1_Montag/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T2_Dienstag/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T3_Mittwoch/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T4_Donnerstag/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T5_Freitag/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T6_Samstag/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/1_Tage/T7_Sonntag/${backupVerzeichnis}"
    	echo "Die Tagesverzeichnisse von ${backupVerzeichnis} sind geloescht                         :`date`" >> $logfileName
    }
    
    
    wochenverzeichnisseLoeschen() {
    	# Loeschen der Wochenverzeichnisse
    	echo "\nDie Wochenverzeichnisse Woche 1 bis Woche 4 von ${backupVerzeichnis} werden geloescht  : `date`" >> $logfileName
    	rm -r "${backupZiel}/$datenQuelle/2_Wochen/W1_Woche/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/2_Wochen/W2_Woche/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/2_Wochen/W3_Woche/${backupVerzeichnis}"
    	rm -r "${backupZiel}/$datenQuelle/2_Wochen/W4_Woche/${backupVerzeichnis}"
    	echo "Die Wochenverzeichnisse von ${backupVerzeichnis} sind geloescht                        : `date`" >> $logfileName
    }
    
    
    ###############################################################################
    ####    Konfiguration                                                      ####
    ###############################################################################
    
    # Argumente des Shell-Scriptes
    [ -z "$1" "$2" "$3" ] && exit 1
    
    # Daten-Quelle URL
    datenQuelle=$1
    # datenQuelle="Bibliothek"
    
    # Backup-Ziel URL
    backupZiel=$2
    # backupZiel="NetBackup"
    
    # Zu sicherndes Verzeichnis
    backupVerzeichnis=$3
    # backupVerzeichnis="Buecher"
    
    # Datum Formatiert speichern (YYYY-MM-DD)
    datum=$(date +%Y-%m-%d)
    #datum=03-08-2015 #1
    #datum=04-08-2015 #2
    #datum=05-08-2015 #3
    #datum=06-08-2015 #4
    #datum=07-08-2015 #5
    #datum=08-08-2015 #6
    #datum=09-08-2015 #7
    
    # Tag in der Woche (1 - 7)
    tagNum=`date +%u`
    #tagNum=1
    #tagNum=2
    #tagNum=3
    #tagNum=4
    #tagNum=5
    #tagNum=6
    #tagNum=7
    
    # Wochentag des Datums ermitteln (Monatag - Sonntag)
    tagName=$(date +%A)
    #tagName=Montag		#1
    #tagName=Dienstag	#2
    #tagName=Mittwoch	#3
    #tagName=Donnerstag	#4
    #tagName=Freitag	#5
    #tagName=Samstag	#6
    #tagName=Sonntag	#7
    
    # Monat des Datums ermitteln (1 - 12)
    monatNum=`date +%m`
    
    # Monat des Datums ermitteln (Januar - Dezember)
    monatName=`date +%B`
    
    # Woche des Backups ermitteln
    if [ ! -d "${backupZiel}/$datenQuelle/2_Wochen/W1_Woche/${backupVerzeichnis}" ]
    	then
    	wocheNum=1
    elif [ ! -d "${backupZiel}/$datenQuelle/2_Wochen/W2_Woche/${backupVerzeichnis}" ]
    	then
    	wocheNum=2
    elif [ ! -d "${backupZiel}/$datenQuelle/2_Wochen/W3_Woche/${backupVerzeichnis}" ]
    	then
    	wocheNum=3
    elif [ ! -d "${backupZiel}/$datenQuelle/2_Wochen/W4_Woche/${backupVerzeichnis}" ]
    	then
    	wocheNum=4
    fi
    
    # Schalter fuer Wochenbackup
    wochenBackup="n"
    
    # Schalter fuer Monatsbackup
    monatBackup="n"
    
    
    ###############################################################################
    ####    Programm-Start                                                     ####
    ###############################################################################
    
    # Name des Datensicherungs-Log
    logfileName="/usr/local/log/${logDatum} ${logZeit} Datensicherung ${backupVerzeichnis} ${tagName}.log"
    
    # Logging der Datensicherungswerte
    echo "Start der Datensicherung fuer ${backupVerzeichnis} `date` \n"   > $logfileName
    echo "Die Daten-Quelle ist                                          : $datenQuelle" >> $logfileName
    echo "Das Backup-Ziel ist                                           : $backupZiel" >> $logfileName
    echo "Das Backup-Verzeichnis ist                                    : $backupVerzeichnis" >> $logfileName
    echo "Das Datum der Datensicherung ist                              : $datum" >> $logfileName
    echo "Wochentag Nummer der Datensicherung                           : $tagNum" >> $logfileName
    echo "Wochentag Name der Datensicherung                             : $tagName" >> $logfileName
    echo "Nummer des Monats der Datensicherung                          : $monatNum" >> $logfileName
    echo "Name des Monats der Datensicherung                            : $monatName" >> $logfileName
    echo "Die Woche des Backups ist                                     : $wocheNum" >> $logfileName
    
    
    # Backupverzeichnis-Namen fuer Tage
    # (T1_Montag, T2_Dienstag, T3_Mittwoch, T4_Donnerstag, T5_Freitag, T6_Samstag, T7 Sonntag)
    
    # Wochentage prüfen und ermitteln (Montag - Sonntag)
    backupTageVerzeichnis="${backupZiel}/${datenQuelle}/1_Tage/T${tagNum}_${tagName}/${backupVerzeichnis}"
    echo "Das Backup-Ziel-Verzeichnis der Tage ist                      : $backupTageVerzeichnis" >> $logfileName
    backupTage="${backupZiel}/${datenQuelle}/1_Tage/T${tagNum}_${tagName}"
    echo "Das Backup-Tage der Tage ist                                  : $backupTage" >> $logfileName
    
    
    if [ ! -d "${backupZiel}/${datenQuelle}/1_Tage/T${tagNum}_${tagName}/${backupVerzeichnis}" ]
    	then
    	echo "Das Verzeichnis ${backupVerzeichnis} fuer ${tagName} existiert nicht" >> $logfileName
    		
    	# Prüft ob ein TMP-Backups vorhanden ist?
    	
    	backupTageTmpVerzeichnis="${backupZiel}/${datenQuelle}/1_Tage/T0_TMP/${backupVerzeichnis}"
    	echo "Pfade für Tage-TMP-Verzeichnis                                : $backupTageTmpVerzeichnis" >> $logfileName
    	
    	backupTageTmp="${backupZiel}/${datenQuelle}/1_Tage/T0_TMP"
    	echo "Pfade für Tage-TMP                                            : $backupTageTmp" >> $logfileName
    	
    	if [ -d $backupTageTmpVerzeichnis ]
    		then
    		echo "Es besteht ein TMP-Backup und wird verschoben                 : `date`" >> $logfileName
    		mkdir -p $backupTage
    		mv $backupTageTmpVerzeichnis "${backupTage}/"
    		echo "Ende des Verschiebevorgangs                                   : `date`" >> $logfileName
    	else
    		echo "Ein TMP-Backup ist nicht vorhanden" >> $logfileName
    	fi	
    	
    	# Prüfungen der einzelnen Tage
    	
    	case $tagName in
    		Montag)		echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						echo "Daten werden fuer ${backupVerzeichnis} kopiert     : `date`" >> $logfileName
    						mkdir -p $backupTage
    						cp -a -R "${datenQuelle}/${backupVerzeichnis}" $backupTage >> $logfileName
    						echo "Ende des Kopiervorgangs"
    					fi;;
    		Dienstag)	echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Montags-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T1_Montag/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Montag wird kopiert     : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T1_Montag/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					fi;;
    		Mittwoch)	echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Dienstags-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T2_Dienstag/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Dienstag wird kopiert     : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T2_Dienstag/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					fi;;
    		Donnerstag) echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Mittwoch-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T3_Mittwoch/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Mittwoch wird kopiert     : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T3_Mittwoch/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					fi;;
    		Freitag) 	echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Donnerstag-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T4_Donnerstag/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Donnerstag wird kopiert     : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T4_Donnerstag/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					fi;;
    		Samstag)	echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Freitag-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T5_Freitag/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Freitag wird kopiert     : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T5_Freitag/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					fi;;
    		Sonntag)	echo "Der ${tagName} wird geprüft" >> $logfileName
    					if [ ! -d $backupTageVerzeichnis ]	
    						then
    						mkdir -p $backupTage
    						echo "Das Verzeichnis ${tagName} ist nicht vorhanden" >> $logfileName
    						# prüft ob es eine Samstag-Sicherung gibt
    						if [ -d "${backupZiel}/${datenQuelle}/1_Tage/T6_Samstag/${backupVerzeichnis}" ]
    							then
    							echo "Eine Sicherung von Samstag wird kopiert                       : `date`" >> $logfileName
    							cp -al -R "${backupZiel}/${datenQuelle}/1_Tage/T6_Samstag/${backupVerzeichnis}" $backupTage >> $logfileName
    							echo "Ende des Kopiervorgangs"
    						fi
    					else
    						echo "Das Verzeichnis ${tagName} besteht bereits" >> $logfileName
    					fi
    					wochenBackup="j"
    					echo "\nFreigabe des Wochenbackups                                    : $wochenBackup" >> $logfileName
    					;;
    	esac
    	
    	# Synchronisiert die Quelle mit dem Ziel
    	echo "\nDie Synchronisation der Daten beginnt                         : `date`" >> $logfileName
    	rsync -a "${datenQuelle}/${backupVerzeichnis}/" $backupTageVerzeichnis
    	echo "Die Synchronisation der Daten ist abgeschlossen               : `date`" >> $logfileName
    fi	
    	
    
    # Backupverzeichnis-Namen fuer Wochen
    # (W1_Woche, W2_Woche, W3_Woche, W4_Woche)
    
    backupWochenVerzeichnis="${backupZiel}/${datenQuelle}/2_Wochen/W${wocheNum}_Woche/${backupVerzeichnis}"
    echo "Das Backup-Wochen-Verzeichnis ist                             : ${backupWochenVerzeichnis} " >> $logfileName
    backupWochen="${backupZiel}/${datenQuelle}/2_Wochen/W${wocheNum}_Woche"
    echo "Die Backup-Wochen sind                                        : ${backupWochen} " >> $logfileName
    
    case $wochenBackup in
    	j)	if [ ! -d $backupWochenVerzeichnis ]
    			then
    			echo "\nStart der Wochensicherung                                     : $wocheNum" >> $logfileName
    			echo "Das Verzeichnis fuer Backup Woche $wocheNum existiert nicht" >> $logfileName
    			echo "Das ^Verzeichnis fuer Backup Woche $wocheNum wird erstellt" >> $logfileName
    			mkdir -p $backupWochenVerzeichnis
    			
    			echo "Der Kopiervorgang der Wochendaten beginnt                     : `date`" >> $logfileName
    			cp -al -R $backupTageVerzeichnis $backupWochen
    			echo "Der Kopiervorgang der Wochendaten wurde abgeschlossen         : `date`" >> $logfileName
    			
    			echo "Die Synchronisation beginnt                                   : `date`" >> $logfileName
    			rsync -a "${datenQuelle}/${backupVerzeichnis}/" $backupWochenVerzeichnis
    			echo "Die Synchronisation wurde abgeschlossen                       : `date` \n" >> $logfileName
    			
    			if [ $wocheNum -lt 4 ]
    				then
    				# Neue Tagesvorlage aus dem Wochen-Backup kopieren
    				echo "Eine TMP-Basisicherung fuer Tagesvorlagen wird kopiert        : `date`" >> $logfileName
    				if [ ! -d "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP/${backupVerzeichnis}" ]
    					then
    					mkdir -p "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP/${backupVerzeichnis}"
    				fi
    				cp -al -R "${backupZiel}/${datenQuelle}/2_Wochen/W${wocheNum}_Woche/${backupVerzeichnis}" "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP"
    				echo "Der Kopiervorgang der TMP-Sicherung ist abgeschlossen         : `date`" >> $logfileName
    			else
    				# Monats-Backup freigeben
    				monatBackup="j"
    				echo "Das Monats-Backup wurde freigegeben                           : $monatBackup" >> $logfileName  
    			fi
    			# Loeschen der Tagesverzeichisse
    			tagesverzeichnisseLoeschen	
    		fi;;
    	n)	echo "Es ist kein Wochen-Backup nötig" >> $logfileName
    		echo "Das Monats-Backup wurde freigegeben                          : $monatBackup" >> $logfileName
    		;;
    esac
     
    #Backupverzeicnis-Namen fuer Monate
    # (M01_Januar, M02_Februar, M03_Maerz, M04_April, M05_Mai, M06_Juni,
    # M07_Juli, M08_August, M09_September, M10_Oktober, M11_November, M12_Dezember)
    
    backupMonateVerzeichnis="${backupZiel}/${datenQuelle}/3_Monate/M${monatNum}_${monatName}/${backupVerzeichnis}"
    echo "Das Backup-Monate-Verzeichnis ist                             : ${backupMonateVerzeichnis} " >> $logfileName
    backupMonate="${backupZiel}/${datenQuelle}/3_Monate/M${monatNum}_${monatName}"
    echo "Die Backup-Monate sind                                        : $backupMonate" >> $logfileName
    
    case $monatBackup in
    	j)	if [ ! -d "${backupZiel}/${datenQuelle}/3_Monate/M${monatNum}_${monatName}" ]
    			then
    			echo "Das Verzeichnis fuer Backup $monatName existiert nicht" >> $logfileName
    			echo "Das Verzeichnis wird erstellt und Daten werden kopiert        : `date`" >> $logfileName
    			mkdir -p $backupMonateVerzeichnis
    			cp -al -R $backupWochenVerzeichnis $backupMonate
    			
    			echo "Beginn der Synchronisation mit dem Zielverzeichnis (--delete) : `date`" >> $logfileName
    			# rsync -a --delete "$datenQuelle/" "$backupMonateVerzeichnis/$verzeichnis"
    			rsync -a --delete  "${datenQuelle}/${backupVerzeichnis}/" $backupMonateVerzeichnis	
    			echo "Ende der Synchronisation mit dem Zielverzeichnis   (--delete) : `date`" >> $logfileName
    				
    			# Neue Tagesvorlage aus dem Monats-Backup kopieren
    			echo "Eine TMP-Basisicherung fuer Monatsvorlagen ist nicht vorhanden und wird kopiert        : `date`" >> $logfileName
    			if [ ! -d "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP/${backupVerzeichnis}" ]
    				then
    				mkdir -p "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP/${backupVerzeichnis}"
    				cp -al -R $backupMonateVerzeichnis "${backupZiel}/${datenQuelle}/1_Tage/T0_TMP"
    				echo "Der Kopiervorgang der TMP-Sicherung ist abgeschlossen         : `date`" >> $logfileName
    			fi
    				
    			# Loeschen der Wochenverzeichnisse
    			wochenverzeichnisseLoeschen
    		fi
    		;;
    	n)	echo "Es ist kein Monats-Backup noetig" >> $logfileName
    		echo "Das Monats-Backup wurde freigegeben                           : $monatBackup" >> $logfileName
    		;;
    esac
    
    echo "\nEnde der Datensicherung fuer `date`"  >> $logfileName
    
     
  7. #6 Spröde, 10.08.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    ###############################################################################
    ####    Konfiguration                                                      ####
    ###############################################################################
    
    # Argumente des Shell-Scriptes
    [ -z "$1" "$2" "$3" ] && exit 1
    
    # Daten-Quelle URL
    datenQuelle=[COLOR="#FF0000"]$1[/COLOR]
    # datenQuelle="Bibliothek"
    
    # Backup-Ziel URL
    backupZiel=[COLOR="#FF0000"]$2[/COLOR]
    # backupZiel="NetBackup"
    
    # Zu sicherndes Verzeichnis
    backupVerzeichnis=[COLOR="#FF0000"]$3[/COLOR]
    # backupVerzeichnis="Buecher"
    Da brauchst Du doppelte Anführungszeichen, so wie Du es in der Bedingung gemacht hast [ -z "$1" "$2" "$3" ].

    Tipp: Besser prinzipiell alles was String ist, oder welche enthalten könnte, quoten. Ich sehe in Deinem Code noch mehr ungequotete Strings (z.B. Dateinamen).
     
  8. #7 Mik, 11.08.2015
    Zuletzt bearbeitet: 11.08.2015
    Mik

    Mik Grünschnabel

    Dabei seit:
    09.08.2015
    Beiträge:
    5
    Zustimmungen:
    0
    Vielen Dank für den Hinweis.

    Du siehst noch mehr ungequtoete Springs?
    Ich meine alle gequotet zu haben!

    Ich dachte wenn ein String der gequotet in eine Variable geschrieben wird, ist er mit Leerzeichen enthalten und der Inhalt als eine Variable deklariert.

    Es sei denn die Variablen müssen wie bei den Argumenten noch ein weiteres Mal gequotet werden?

    Sowas wie:

    Code:
    if [ -d $backupTageTmpVerzeichnis ] ...
    mkdir -p $backupTage ...
    mv $backupTageTmpVerzeichnis "${backupTage}/" ...
    case $tagName in ...
    
    Der String Date ist zwar kein Dateiname, aber sollte das auch gequotet werden?
    Code:
    datum=$(date +%Y-%m-%d)
    Nochmals Vielen Dank es hat jetzt geklappt, das Script läuft jetzt auch mit Dateinamen in denen Leerzeichen enthalten sind. Wieder mal was gelernt.
    Mik
     
  9. Mik

    Mik Grünschnabel

    Dabei seit:
    09.08.2015
    Beiträge:
    5
    Zustimmungen:
    0
    Ich hätte abschliessend zu diesem Thema noch eine Frage bezüglich Cron und Steuerscripte.
    Meinen BananaPi habe ich noch ich so lange und dieses Script ist mein erstes was ich erstellt habe und daher besitze ich noch nicht so die Erfahrung.

    Eigentlich hatte ich mir gedacht die Datensicherung über den Cron zu automatisieren, indem ich mein Script mit Argumenten in die Crontab einarbeite.

    Code:
    00 18 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "3D Bibliothek"
    30 18 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Adobe Illustrator"
    40 18 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Adobe Photoshop Styles"
    50 18 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Corel Draw"
    00 19 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Digital und Printmedien"
    30 19 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Schrifttypen"
    40 19 * * * rsyncBackupRotate111.sh Bibliothek NetBackup "Vorlagen Office"
    
    Mich würde jetzt interessieren ob um 18:30 die Sicherung von "Adobe Illustrator" ausgeführt wird wenn die Sicherung von 18:00 mit der "3D Bibliothek" noch nicht fertig ist.

    Dann stellt sich die Frage ob die Vorgehensweise so sinnvoll ist?
    Ich denke mal das es besser wäre einen Sicherungsjob bis zum ende abarbeiten zu lassen, bevor man den nächsten beginnt?

    Dann käme mir noch ein Steuerscript in den Sinn um das Problem zu lösen!
    Die crontab hätte dann den Eintrag
    Code:
    00 18 * * * Steuerscript00.sh
    Das Steuerskript sähe dann wie folgt aus
    Code:
    #!/bin/sh
    
    # Script-Name : StuerScript00.sh
    # Version     : 0.1
    # Autor       : Michael Madej
    # Erstellt    : 26.07.2015
    # Datum       : 11.08.2015
    
    # Befehl für die Modifizierung der Crontab
    # EDITOR=nano crontab -e 
    
    # Testen des Cron-Dienstes
    # */1 * * * * cronTest.sh
    
    # rsyncBackupRotate111 benötigt 3 Argumente
    # mount.cifs //xxx.xxx.xxx.xxx/Daten-Server/Bibliothek /root/Bibliothek -o user=xxx,password=xxx
    # mount.cifs //xxx.xxx.xxx.xxx/Backup-Server /root/NetBackup -o user=xxx,password=xxx
    # rsyncBackupRotate111 [Daten-ServerURL] [Backup-ServerURL] [zuSicherndesVerzeichnis]
    # Beispiel: rsyncBackupRotate111.sh Bibliothek NetBackup Schrifttypen
    
    rsyncBackupRotate111.sh Bibliothek NetBackup "3D Bibliothek"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Adobe Illustrator"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Adobe Photoshop Styles"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Corel Draw"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Digital und Printmedien"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Schrifttypen"
    rsyncBackupRotate111.sh Bibliothek NetBackup "Vorlagen Office"
    #
    
    wären das richtige Ansätze?

    Danke
    Mik
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 Spröde, 13.08.2015
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Zu den Fragen in Post #7:

    Das kannst Du eigentlich alles direkt im Terminal antesten:
    Code:
    ~> test="drei   Leerzeichen"
    ~> echo $test
    drei Leerzeichen
    ~> echo "$test"
    drei   Leerzeichen
    
    Check?


    Mit Befehlssubstitution muss man mitunter auch doppelt quoten:
    Code:
    ~> echo $( echo $test )
    drei Leerzeichen
    ~> echo $( echo "$test" )
    drei Leerzeichen
    ~> echo "$( echo $test )"
    drei Leerzeichen
    ~> echo "$( echo "$test" )"
    drei   Leerzeichen
    

    Zu den Fragen in Post #8 kann ich nichts beitragen.
     
  12. #10 schwedenmann, 14.08.2015
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo



    Schau dir mal dazu anacron an, das begebt genau dein Problem:devil:

    mfg
    schwedenmann
     
Thema:

Shellscript für rotierende Datensicherung

Die Seite wird geladen...

Shellscript für rotierende Datensicherung - Ähnliche Themen

  1. Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme

    Was ist besser? Perl, Phyton, Ruby? für Shellscripting, Webscripts, kleine Programme: Hi. Ich suche die "beste" Programmiersprache. mit der man die meißten Fliegen mit einer Klappe schlagen kann. Die gut ist für Shellscripting,...
  2. Webinterface für Gameserver/Shellscript wird nicht ausgeführt

    Webinterface für Gameserver/Shellscript wird nicht ausgeführt: Guten Abend, ich weis die Uhrzeit ist unmenschlich, aber ich sitz jetzt seit 4h dran und komm auf keine Lösung. Problem ist folgendes: Habe...
  3. suche einfache beispiele für die shellscriptprogrammierung

    suche einfache beispiele für die shellscriptprogrammierung: hallo liebe leut, da ich mich nun seit kürzerem auch mit der shell im allgemeinen und dem schreiben von shellscripten insbesondere, würde ich...
  4. shellscript für vnstat

    shellscript für vnstat: hi, mit vnstat zeichne ich meinen traffic auf. nun möchte ich ein shelscript schreiben, das mir a.) eine konsole öffnet b.) in dieser "vnstat"...
  5. Shellscript unerwartetes Dateiende

    Shellscript unerwartetes Dateiende: Hallo zusammen, folgendes Script führe ich in einer .bat via cygwin und curl aus. Beim Ausführen erhalte ich die einen Syntaxfehler:...