lisanet
Aktives Mitglied
        Thread Starter
    
				
					
						- Registriert
- 05.12.2006
- Beiträge
- 14.933
- Reaktionspunkte
- 18.500
Im Thread -> https://www.macuser.de/threads/clonen-noch-problemlos-moeglich.948503/page-2#post-12419555 hatte ich den Vorschlag erwähnt, für shell scripte, die man im Hintergrund mittels LauchnAgents laufen lässt, die Ergebnisse bzw die erzeugten log files sich selbst per Mail zu zu senden, um so eine Rückmeldung zu erhalten, ob die scripte erfolgreich waren.
Wichtig:
Ich kann hier keine Tipp-Anleitung für Anfänger in Terminal.app und shell scripten geben. Ihr solltet also wissen, wie ihr ein shell script anlegt, es ausführbar macht und in ein Verzeichnis kopiert. Das alles ist aber kein Hexenwerk.
Für das Anlegen von LauchAgents kann ich die App "LaunchControl" wärmstens empfehlen. Sie hilft euch auch bei vielen anderen Dingen rund um Hintergrundobjekte und Anmeldeobjekte. Ihr findet sie hier -> https://www.soma-zone.com/LaunchControl/
Hier nun die dazu erforderlichen 2 shell scripte in "generalisierter" Form. Ich habe dazu als Einsatzzweck angenommen, dass mittels rsync ein Verzeichnis auf ein NAS gesichert wird, auf dem ein rsync Server läuft. openmediavault als NAS bietet dafür eine sehr einfache Möglichkeit.
Zum Schluss gibt's noch ein kleines Bonus-Script.
Das rsync script kann selbstverständlich angepasst werden, so dass das Ziel eine externe Platte ist oder ein anderer remote Rechner, der per ssh erreichbar ist. Diese Fälle werden hier aber nicht behandelt.
Das rsync-script beherrscht dabei folgenden Funktionalität
	
	
	
		
Im script ist ein eine Verzögerung von 13 Sekunden (
Wollt ihr zusätzlich auch die gesendete Mail löschen, dann fügt nach der ersten delete-Zeile noch folgende weitere delete-Zeile ein.
	
	
	
		
mailscript wird wie folgt aufgerufen
	
	
	
		
Wichtig ist, dass ihr die Accountbezeichnung exakt so schreibt, wie sie in Mail.app angezeigt wird. (Groß/Klein muss beachtet werden). Das ist nicht die Absendermailadresse!
Hier nun das "generalisierte" rsync-script. Das script nutzt eine aktualisierte Version von rsync, damit wie oben erwähnt, Umlaute auf dem NAS bei SMB-Zugriff auch korrekt dargestellt werden können und die Zugriffe (auch das Löschen) korrekt erfolgt. Nutzt ihr eine externe Platte als Ziel und die nur mit macOS, könnt ihr auch das systemeigene rsync verwenden. Entfernt in diesem Fall im script den Parameter
	
	
	
		
Im Abschnitt "config" setzt ihr die entsprechenden Variablen, so wie sie eben bei euch sind. Nochmals zur Erinnerung: es ist ein rsync-daemon auf dem NAS erforderlich.
Die Passworteingabe erfolgt mittels eines Passwortfiles, das ihr in eurem Home-Verzeichnis anlegt. Das File beinhaltet das Passwort im Klartext (nicht meckern, wer das ändern will kann es gerne tun, ich tue es nicht). Das Passwortfile muss
Wie oben erwähnt, werden im Quellverzeichnis gelöschte Dateien im Ziel in ein Verzeichnis names "deleted" verschoben. Damit wird der Zeitstempel der Datei auf das Datum des jeweiligen Backup-Laufes gesetzt. So kann mit einem einfachen find-Befehl die Dateien anzeigen/löschen, die älter als ein bestimmtes Alter sind. Hier ist ein kleines Bonus-scritp, welches genau das macht. Diese Script müsst ihr natürlich auf dem NAS laufen laufen, am einfachsten per cron job dort. Im Beispiel werden "deleted" Dateien und Verzeichnisse gelöscht, die älter als 720 Tage sind.
	
	
	
		
So, das war jetzt eine Menge Text. Ich hoffe ich habe bei der "Generalisierung" keine Fehler gemacht (naja, ich bin schon sehr zuversichtlich).
Viel Spaß bei syncen mit rsync und bei den erzeugten mails.
	
		
			
		
		
	
				
			Wichtig:
Ich kann hier keine Tipp-Anleitung für Anfänger in Terminal.app und shell scripten geben. Ihr solltet also wissen, wie ihr ein shell script anlegt, es ausführbar macht und in ein Verzeichnis kopiert. Das alles ist aber kein Hexenwerk.
Für das Anlegen von LauchAgents kann ich die App "LaunchControl" wärmstens empfehlen. Sie hilft euch auch bei vielen anderen Dingen rund um Hintergrundobjekte und Anmeldeobjekte. Ihr findet sie hier -> https://www.soma-zone.com/LaunchControl/
Hier nun die dazu erforderlichen 2 shell scripte in "generalisierter" Form. Ich habe dazu als Einsatzzweck angenommen, dass mittels rsync ein Verzeichnis auf ein NAS gesichert wird, auf dem ein rsync Server läuft. openmediavault als NAS bietet dafür eine sehr einfache Möglichkeit.
Zum Schluss gibt's noch ein kleines Bonus-Script.
Das rsync script kann selbstverständlich angepasst werden, so dass das Ziel eine externe Platte ist oder ein anderer remote Rechner, der per ssh erreichbar ist. Diese Fälle werden hier aber nicht behandelt.
Das rsync-script beherrscht dabei folgenden Funktionalität
- das script verbindet sich mit einem rsync Server der auf einem NAS läuft mit user/password wie auf dem rsync-Server eingerichtet
- es macht inkrementelle backups
- gelöschte Dateien werden auf dem rsync-Server in ein "deleted-Verzeichnis" gesichert, so dass sie bei Bedarf wiederhergestellt werden können.
- bei fehlerfreiem Backup wird eine Mail mit dem Betreff "rsync successfull" an die im script angegebene Adresse versandt, vom Accoutn aus der ebenso im Script angegeben wird. Der Versand erfolgt via Mail.app. Ihr müsst also Mail.app verwenden.
- wenn ein Fehler auftritt, wird eine Mail mit dem Betreff "rsync failed" mit dem log-file als Mailinhalt versandt.
mailscript im Verzeichnis /usr/local/bin
		Bash:
	
	#!/bin/zsh
while [ "$#" -gt 0 ]; do
  case "$1" in
    -s) subject="$2"
       shift
       ;;
    -a) account="$2"
       shift
       ;;
    -t) address="$2"
       shift
       ;;
    *) echo "unkonwn parameter: $1"
      exit
      ;;
  esac
  shift
done
while read line ; do
  line=$(echo $line | tr '"' "'")
  content="$content$line\n"
done
[ -z "$content" ] && exit
[ -z "$address" ] && exit
[ -z "$subject" ] && subject=empty
osascript - << EOF
tell application "Mail"
    set newMessage to make new outgoing message with properties {sender:"$account", subject:"$subject", content:"$content", visible:false}
    tell newMessage to make new to recipient with properties {address:"$address"}
    send newMessage
    delay 13
    delete (first message of drafts mailbox)
end tell
EOFIm script ist ein eine Verzögerung von 13 Sekunden (
delay 13) enthalten, nach der der Entwurf (der leider gespeichert wird) gelöscht wird. Die gesendete Mail ist natürlich im gesendet-Ordner enthalten. Die Verzögerung müsst ihr envetuell Anpassen, ja nach dem, wie lange ihr das verzögerte Senden in Mail.app eingestellt habt. Es sollt (auf meinem M1) 3 Sekunden länger sein, als der eingestellte Wert.Wollt ihr zusätzlich auch die gesendete Mail löschen, dann fügt nach der ersten delete-Zeile noch folgende weitere delete-Zeile ein.
		Bash:
	
	delete (first message of sent mailbox)mailscript wird wie folgt aufgerufen
		Bash:
	
	echo "Inhalt der Mail" | mailscript -s "Betreff der Mail" -a "Accountbezeichnung des Absenders" -t "Mailadresse des Empfängers"Wichtig ist, dass ihr die Accountbezeichnung exakt so schreibt, wie sie in Mail.app angezeigt wird. (Groß/Klein muss beachtet werden). Das ist nicht die Absendermailadresse!
Hier nun das "generalisierte" rsync-script. Das script nutzt eine aktualisierte Version von rsync, damit wie oben erwähnt, Umlaute auf dem NAS bei SMB-Zugriff auch korrekt dargestellt werden können und die Zugriffe (auch das Löschen) korrekt erfolgt. Nutzt ihr eine externe Platte als Ziel und die nur mit macOS, könnt ihr auch das systemeigene rsync verwenden. Entfernt in diesem Fall im script den Parameter
--iconv=utf-8-mac
		Bash:
	
	#!/bin/bash
#  rsyncbackup
#
#  Created by Simone Karin Lehmann on 03.10.2018.
#  (c) BSD 2 clause license
### config
SOURCE="/der/Pfad/zum/Quellverzeichnis"
SERVER="rsyncuser@nas.local::Name des rsync modules"
DEST="/rsyncbackup"
PASSWORDFILE="--password-file=/Users/xxxxx/.nas_rsync_pass"
ACCOUNT="Mailaccount"
ADDRESS="toaddress@domain.de"
### no need to edit below this line
progname="rsyncbackup"
logfile="/tmp/$progname"log
backupdir="deleted"
do_rsync()
{
  # --archive = rlptgoD
  # we need no time preservation, so -rlpgoD is sufficient but we must then use -u
  /usr/local/bin/rsync  "$PASSWORDFILE" --iconv=utf-8-mac --verbose -rlpgoDu --delete-after --exclude=".DS_Store" --backup --backup-dir="$DEST/$backupdir" "$SOURCE" "$SERVER/$DEST"/current 2>"$logfile"
}
### main
echo > "$logfile"
do_rsync
cat "$logfile" | /usr/local/bin/mailscript -s "[rsyncbackup] error in syncing" -a "$ACCOUNT" -t $ADDRESS
[ -s "$logfile" ] || ( echo "Success." | /usr/local/bin/mailscript -s "[rsyncbackup] successfully finished syncing" -a "$ACCOUNT" -t $ADDRESS)Im Abschnitt "config" setzt ihr die entsprechenden Variablen, so wie sie eben bei euch sind. Nochmals zur Erinnerung: es ist ein rsync-daemon auf dem NAS erforderlich.
Die Passworteingabe erfolgt mittels eines Passwortfiles, das ihr in eurem Home-Verzeichnis anlegt. Das File beinhaltet das Passwort im Klartext (nicht meckern, wer das ändern will kann es gerne tun, ich tue es nicht). Das Passwortfile muss
.nas_rsync_pass heißen.Wie oben erwähnt, werden im Quellverzeichnis gelöschte Dateien im Ziel in ein Verzeichnis names "deleted" verschoben. Damit wird der Zeitstempel der Datei auf das Datum des jeweiligen Backup-Laufes gesetzt. So kann mit einem einfachen find-Befehl die Dateien anzeigen/löschen, die älter als ein bestimmtes Alter sind. Hier ist ein kleines Bonus-scritp, welches genau das macht. Diese Script müsst ihr natürlich auf dem NAS laufen laufen, am einfachsten per cron job dort. Im Beispiel werden "deleted" Dateien und Verzeichnisse gelöscht, die älter als 720 Tage sind.
		Bash:
	
	#!/bin/bash
dir="/der/Pfad/zum/Verzeichnis/rsyncbackup/deleted"
days=720
# delete old files
find "$dir" -type f -mtime +$days -print0 | xargs -0 rm
# delete empty dirs
find "$dir" -type d -empty -print0 | xargs -0 rmdirSo, das war jetzt eine Menge Text. Ich hoffe ich habe bei der "Generalisierung" keine Fehler gemacht (naja, ich bin schon sehr zuversichtlich).
Viel Spaß bei syncen mit rsync und bei den erzeugten mails.
			
				Zuletzt bearbeitet: 
			
		
	
								
								
								
								
									
	
		
			
		
		
	
	
		
			
		
	
	
		
			
		
		
	
								
							
							 
 
		 
 
		 
 
		

 
 
		
 damit ich nachvollziehen kann wann wo und mit wem ich essen war.
 damit ich nachvollziehen kann wann wo und mit wem ich essen war.  
 
		


 
 
		 
 
		 
 
		 
 
		 
 
		