Script

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Ein herzliches Hallo an die Community,

ich erstelle jeden Abend von meinen VMs ein Backup auf mein Synology NAS. Diese werden im Verzeichnis /volume1/VMBackup gespeichert und jede Nacht überschrieben. Ich würde jetzt gerne eine Aufgabe erstellen, dass die VMs (also den gesamten Ordnerinhalt von /volume1/VMBackup) jeden Tag um 09:00 in das Verzeichnis /volume1/Tagesbackup/%datum% geschoben werden. Sprich, dass dann jeden Tag /volume1/Tagesbackup/10.02.2022, /volume1/Tagesbackup/11.02.2022 etc. erstellt wird. Weiters soll nach fünf Tagen immer das älteste Backup im Verzeichnis /volume1/Tagesbackup/ gelöscht werden. Sprich am 15.02.2022 soll das Backup /volume1/Tagesbackup/10.02.2022 gelöscht werden, am 16.02.2022 dann das Backup vom 11.02.2022 etc.

Eine Extraaufgabe soll am Samstag immer das aktuelle Datum - 1 in dem Ordner /volume1/Cloudbackup schieben. Der Ordnerinhalt soll am Mittwoch gelöscht werden. Das Cloudbackup würde ich mittels Cloudsync realisieren.

Könnte mir jemand bei den Scripten für Aufgaben helfen.

Herzlichen Dank!

Liebe Grüße - Nesta
 

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Danke, in welchen Form das Datum in weiterer Folge ist, ist eigentlich egal.
 

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Hier mein Script für das erstellen von Datumspfaden und dem kopieren.
d="$(date +"%Y-%m-%d")"
mkdir /volume1/Tagesbackup/"$d"
cp -r /volume1/VMBackup* /volume1/Tagesbackup/"$d"/

Wie könnte ich jetzt im Ordner /volume1/Tagesbackup/ die Ordner die älter als fünf Tage sind löschen?
 

tokon

Benutzer
Mitglied seit
12. Dez 2015
Beiträge
192
Punkte für Reaktionen
41
Punkte
28
Ganz grob in diese Richtung hätte ich es versucht:

Bash:
backuppfad="/volume1/Tagesbackup/$(date +%Y-%m-%d)"

mkdir "$backuppfad"

cp -ar /volume1/VMBackup/* "$backuppfad"

find /volume1/Tagesbackup/* -maxdepth 0 -type d -mtime +5 -exec rm -r {} \;

Und entsprechend am Samstag:
Bash:
find /volume1/Tagesbackup/* -maxdepth 0 -type d -mtime 1 -exec cp -ar {} /volume1/Cloudbackup/ \;
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Nesta

nas-central.de

Benutzer
Lösungspartner
Mitglied seit
22. Jun 2021
Beiträge
136
Punkte für Reaktionen
30
Punkte
34
Diese Aufgabe kannst du mit Snapshot Replication viel einfacher lösen und zudem auch noch sicherer.

Für die Extraaufgabe musst du die entsprechende Sicherung dann nur Samstag in das Verzeichnis verschieben und Mittwochs löschen.
 
  • Like
Reaktionen: Nesta und geimist

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Danke für die Antworten. Ich denke, so wie es @tokon beschrieben hat funktioniert es für mich perfekt. Herzlichen Dank!
 

himitsu

Benutzer
Sehr erfahren
Mitglied seit
22. Okt 2018
Beiträge
2.904
Punkte für Reaktionen
337
Punkte
123
Jo, wie wäre es, wenn du bei VMBackup einfach um 9°° ein Snapshot erstellen und das umkopieren sein lässt?

Beim Speichern dann nur nicht vorher alles löschen, sondern überschreiben.
Spart eventuell auch etwas Speicher, wenn unveränderte Dateien dann nicht mehrfach Platz belegen.


VMM hat ja selber auch eine Scnapshot-Replication-Funktion eingebaut, aber die funktioniert wohl leider nur, wenn man das auf einer anderen DS speichern lässt.


Alternativ kann man auch aus der VM raus z.B. ActiveBackup4Busines nutzen.
 

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Und entsprechend am Samstag:
Bash:
find /volume1/Tagesbackup/* -maxdepth 0 -type d -mtime 1 -exec cp -ar {} /volume1/Cloudbackup/ \;

Hi Tokon,

das erste Script funktioniert ganz wunderbar. Aber bei den Script passiert irgendwie gar nichts.

Ich habe mir nun überlegt, dass man eventuell eine variable für das gestrige Datum definiert. und dann als Dateipfad einfügt. Das funktioniert aber leider auch nicht.

yesterday=date --date="yesterday" +"%Y-%m-%d"
cp -ar find /volume1/Tagesbackup/$yesterday /volume1/Cloudbackup/ \;

Wie würde der Befehl lauten, wenn man alle Ordner und Dateien im Ordner /volume1/Cloudbackup/ löschen möchte und könnten die Befehle in einer Aufgabe parallel laufen. Sprich zuerst löscht die Aufgabe die alten Ordner raus und dann soll der neue Tagesordner kopiert werden.

Kannst Du mir da noch mal helfen. Danke!
 

tokon

Benutzer
Mitglied seit
12. Dez 2015
Beiträge
192
Punkte für Reaktionen
41
Punkte
28
Aber bei den Script passiert irgendwie gar nichts.
Macht bei mir im Test was es soll.
Musst halt schauen woran es liegt. So muss z.B. ohne die Option -exec wenigstens schon mal der Pfad gefunden und ausgegeben werden.

rm -r = rekrusives Löschen
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.511
Punkte für Reaktionen
1.347
Punkte
234
Ich habe mir nun überlegt, dass man eventuell eine variable für das gestrige Datum definiert. und dann als Dateipfad einfügt. Das funktioniert aber leider auch nicht.
Um die Ausgabe eines Befehls einer Variablen zuzuweisen, musst du das so schreiben:
Bash:
yesterday=$(date --date="yesterday" +"%Y-%m-%d")
cp -ar find /volume1/Tagesbackup/$yesterday /volume1/Cloudbackup/ \;

Wenn du die Variable $yesterday nicht mehrmals benötigst, geht es auch so kürzer:
Bash:
cp -ar find /volume1/Tagesbackup/$(date --date="yesterday" +"%Y-%m-%d") /volume1/Cloudbackup/ \;
 

Nesta

Benutzer
Mitglied seit
10. Feb 2022
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Herzlichen Dank an alle. Beide Scripts funktionieren, ich konnte meinen Fehler dann mittels Logfile finden. Die Berechtigung war falsch gesetzt. Was bin ich nur für ein Noob :rolleyes:

cp: failed to access ';': Permission denied
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat