Monatliche Backups - Lösung mittels crontab

  • Da leider immer wieder das Thema „monatliches Backup“ aufkommt und es mich auch ärgert, das im QTS in der Backup Station (Sicherungsmanager) zwar der Eintrag „monatlich“ existiert, in der Zeitsteuerung für das Ein- /Ausschalten jedoch max. ein wöchentliches Intervall möglich ist, haben RedDiabolo und ich uns eine Notlösung geschaffen.


    Dabei hat sich schnell herausgestellt, das auch wir unsere Backup NAS unterschiedlich betreiben.

    Bei mir ist das Backup NAS wöchentlich gestartet und hat die Backup Jobs durchgeführt, bei RedDiabolo startet das NAS in kürzeren Intervallen.


    Dennoch sieht die gemeinsame Lösung im Prinzip wie folgt aus:

    Da das NAS sowieso mehrmals im Monat starten muss wird durch ein Script ermittelt, wann das nächste monatliche Backup durchgeführt werden soll.

    Dies ist durch eine Variable (DOB) im Script festgelegt, die Wert der Variablen sollte zwischen 01 und 28 liegen. Die Werte 29 – 31 wären möglich, machen aber wiederum Probleme weil es in der Tabelle für die Backup Jobs auch nur Tage gibt (1...31), keinen „Monatsersten“ oder „Monatsletzten“.


    Außerdem können der Tag, die Emfänger, die Absender e-Mail und die Sprache beim Scriptaufruf als Parameter mit angegeben werden.

    Wird kein Parameter angegeben, so werden im Script folgende Werte gesetzt:

    Tag des Backups: 01 (Monatserster)

    Empfänger: nobody@somewhere.com (es wird ein entsprechender Hinweis im Log vermerkt)

    Absender: durch die Variable HOSTNAME ermittelter Name des NAS.


    Ist ein Backup Job für den 31. geplant, läuft der Job im Januar, März, Mai, usw… eben nur in Monaten mit 31 Tagen.

    Will man ein Backup zum Monatsende JEDEN Monats haben, bleibt nur der 28. als gemeinsamer Nenner übrig.

    Daher wird im Script bei Einträgen 29...31 immer der 28. eingetragen, wer das nicht möchte, muss das Script anpassen und die Zeilen rausnehmen.



    Sobald also das Datum für das nächste Monatsbackup ermittelt ist, und die Differenz zum aktuellen Datum <= 7 (eine Woche) ist, wird in der Tabelle der Energiesteuerung der entsprechende Eintrag geändert.

    Die Uhrzeit wird vom bisherigen Eintrag übernommen!


    Beispiel: das NAS startet bisher 1 x wöchentlich am Sonntag um 02:00Uhr und schaltet sich um 06:00 Uhr wieder aus..

    Der nächste Monatserste fällt auf den folgenden Mittwoch, also wird der Starteintrag für das nächste Einschalten auf Mittwoch um 02:00Uhr und das nächste Ausschalten auf Mittwoch 06:00 Uhr gesetzt.


    Achtung: derzeit funktioniert das nur wenn Ein- und Ausschalten am selben Tag oder mit max. einem Tag dazwischen stattfinden.

    Z.B. findet das Einschalten um 23:00 Uhr, das Ausschalten aber erst am darauffolgenden Tag um 01:00 statt!

    Liegen mehr Tage zwischen Ein- und Ausschalten wird es zu Fehlern kommen!



    Das Script passt dies aus der vorhandenen Tabelle an.


    Sobald das NAS am Monatsersten startet läuft das Script erneut, und es werden die vorherigen Werte (Start: Sonntag 02:00 Uhr, Aus: Sonntag 06:00Uhr) wieder gesetzt.


    Das NAS startet also jede Woche einmal, in der Woche mit dem Monatsersten ggf. zweimal.


    Die vorliegende Version kann unter folgenden Bedingungen ohne Modifikation eingesetzt werden:


    In der Tabelle der Energiezeitsteuerung existieren nur die beiden Einträge „Einschalten“ und „Herunterfahren“ (auch in dieser Reihenfolge!), oder diese Einträge stehen an 1. und 2. Stelle in der Tabelle.

    Sind weitere Einträge vorhanden (z.B. Ruhemodus oder Reboot), dann muss das Script angepasst werden.


    Das Script hat seine Feuertaufe schon hinter sich, dennoch können Fehler nicht ausgeschlossen werden.

    Und selbstverständlich gibt es noch genug Raum für Verbesserungen ;).


    Aber alte IT Weisheit:

    „Sobald ein Programm fertig ist, ist es nicht mehr zu gebrauchen!“


    Ich hoffe dennoch, das es dem Ein oder Anderen trotzdem dabei helfen kann monatliche Backups durchzuführen.



    Zum Ausführen des Scripts:

    Das Script in der crontab eintragen, z.B.


    0-59/60 * * * * /etc/config/scriptname.sh -dob 01 -lng deutsch


    Die 01 steht für den ersten Tag des Monats, es kann jeder andere Wert zwischen 01 und 31 (siehe Anmerkungen oben) genommen werden. Wird das Script ohne diesen Parameter gestartet, wird 01 automatisch verwendet.


    Soll das Backup immer Mitte des Monats erfolgen, ist der Eintrag mit:


    0-59/60 * * * * /etc/config/scriptname.sh -dob 15


    vorzunehmen.

    Das beiliegende PDF beschreibt die Variablen etwas genauer.


    Rückmeldungen sind erwünscht (positive und negative) 8).


    Gruss und ein frohes Neues...


    Edit: das Script musste ich als .txt anhängen, auf dem NAS sollte es natürlich .sh heissen.

    Edit2: jetzt hängt das richtige Script dran, war leider noch ein # zuviel.

    mbackup.zip

    3 Mal editiert, zuletzt von FSC830 ()

  • FSC830

    Hat den Titel des Themas von „Monatliche Backups - Lösung mittles crontab“ zu „Monatliche Backups - Lösung mittels crontab“ geändert.
  • Ich kann den obigen Beitrag nicht mehr editieren weil zu alt, daher hier die aktuelle, fehlerbereinigte Version für ein monatliches Ein- /Ausschalten des NAS.


    Wesentliche Änderungen (ausser den Bugfixes):

    Start- / Shutdown Zeit können nun auch als Parameter mitgegeben werden.

    Die Parameter werden größtenteils auf Plausibilität geprüft.

    Alle Fehler werden im Logfile protokolliert.



    Gruss

  • Ok, könntest Du aber bitte dropsdem die alte .txt entfernen?

    Die war noch etwas buggy 😉.


    Gruss

  • Deswegen gibts für solche Sachen die Filebase (in der Menüleiste unter Downloads). ;)

    Erledigt!


    :beer: