Shellscript für rotierende Datensicherung

M

Mik

Grünschnabel
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

Anhang anzeigen rsyncBackupRotate110.sh.zip
 
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
 
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
 
Zuletzt bearbeitet:
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).
 
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
 
Zuletzt bearbeitet:
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
 
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.
 
Hallo


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?


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

mfg
schwedenmann
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

find Ausgabe in "Anführungszeichen"

Queue für copy Script

Shellskript - Fehler in Cron

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben