Script

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Nesta

Benutzer
Registriert
10. Feb. 2022
Beiträge
7
Reaktionspunkte
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
 
Tipp: Verwende als Datumsformat besser JJJJ-MM-TT
 
  • Like
Reaktionen: geimist
Danke, in welchen Form das Datum in weiterer Folge ist, ist eigentlich egal.
 
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?
 
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
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
Danke für die Antworten. Ich denke, so wie es @tokon beschrieben hat funktioniert es für mich perfekt. Herzlichen Dank!
 
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.
 
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!
 
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
 
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/ \;
 
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
 
Status
Für weitere Antworten geschlossen.
 

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