Crontab – Planen meiner Backups

Crontab – Planen meiner Backups

Ich möchte jeden Freitagabend ein Backup durchführen (nein, das ist nicht die gesamte Backup-Routine, sondern nur ein Teil davon). Das Backup jedes Freitagabends wird erst 4 Wochen später überschrieben. Im Wesentlichen habe ich also vier rotierende Backups: Woche1, Woche2, Woche3 und Woche4.

Jetzt muss das Backup-Skript für Woche 1 alle 4 Wochen ausgeführt werden. Aber ich möchte auch, dass das Skript für Woche 2 alle vier Wochen ausgeführt wird. Ich weiß, dass ich der Crontab sagen kann, alle X Wochen/Tage/Stunden/was auch immer etwas auszuführen. Aber wie richte ich es so ein, dass jedes dieser vier Skripte tatsächlich in unterschiedlichen Wochen ausgeführt wird, wie vermeide ich, dass alle 4 Skripte in derselben Nacht ausgeführt werden und dann wochenlang brav gewartet wird, nur umalleführe es nochmals aus?

Antwort1

Anstatt solch komplexe Backup-Routinen zu entwickeln, sollten Sie Bacula verwenden, eine kostenlose Open-Source-Software der Enterprise-Klasse. Bacula ist sehr flexibel und kann Backup-Jobs auf nahezu jede gewünschte Weise automatisieren.

Auch wenn Sie eine MANUELLE Lösung erstellen können, gibt es viele Nachteile:

  • Tracking-Fehler wären ein großes Problem
  • Die Nachverfolgung von Aufträgen wäre mühsam
  • Die manuelle Einrichtung erfordert immer eine ständige Überwachung

Der beste Systemadministrator ist derjenige, der alles automatisiert und sich entspannt zurücklehnt.

Antwort2

Ich denke, Franks Antwort ist die beste, aber um es so zu machen, wie Sie es beschreiben, können Sie jeden Freitag einen Cronjob für Ihr Backup ausführen lassen und dann Logrotation verwenden, um die letzten vier Kopien aufzubewahren. Oder suchen Sie mit Find nach Backups, die älter als vier Wochen sind.

Antwort3

Eine Alternative: Integrieren Sie die Komplexität in Ihr Skript, da dieses diese Art von Komplexität besser handhaben kann als cron. Also (unter der Annahme von bash):

  • Lassen Sie Ihren Cronjob jeden Freitag dasselbe Skript ausführen.
  • Ändern Sie Ihr Skript, um das Modulo 4 der Wochen seit der Epoche zu erhalten:

(dummes Formatierungsproblem, hier muss Blindtext eingefügt werden)

epochsecs=`date +%s`   # second since epoch

Und

weeknum=`expr $epochsecs / 86400 / 7 % 4`  # weeks since epoch, modulo 4
  • Verwenden Sie diese Nummer als Teil des Sicherungsdateinamens.

    backupfile=/Pfad/zur/Sicherungsdatei.$weeknum

  • Überschreiben Sie die alten Sicherungsdateien.

    rm $backupfile tar czvf $backupfile /Bündel/von /Verzeichnissen

Alternativ können Sie einfach ein Dateinamensuffix mit dem Datum verwenden:

backupfile=/path/to/backup/file.`date +%Y-%m-%d`

Führen Sie dann in Ihrem Skript eine Suchfunktion aus, die Sicherungsdateien löscht, die älter als 28 Tage sind:

find /path/to/backup -maxdepth 1 -ctime +28 -delete

Überlasten Sie cron auf keinen Fall mit dieser Art von Komplexität. Behandeln Sie es im Skript, das die Komplexität wahrscheinlich besser handhaben kann.

Antwort4

Zwei Alternativen:

  • Planen Sie ein Skript, das jeden Freitag ausgeführt wird und das nachverfolgt, welcher Job zuletzt ausgeführt wurde, und das den nächsten Job in der Sequenz ausführt.

oder:

  • Planen Sie Woche 1 so, dass sie an den Tagen 1 bis 7 des Monats und nur freitags ausgeführt wird.
  • Planen Sie Woche 2 so, dass sie an den Tagen 8 bis 14 des Monats und nur freitags ausgeführt wird.
  • ... und so weiter.
  • Sie werden feststellen, dass dies Ihnen nicht ganz einperfektBackup - es wird vorkommen, dass Sie eine Woche lang kein Backup durchführen (wenn der 29./30./31. Tag auf einen Freitag fällt)

Diese Art der Berechnung ist genau der Grund, warumSpaßals alles selbst zu tun, werden Sie weiter kommen, wenn Sie ein geeignetes Backup-Tool wie Amanda oder Bacula verwenden,Frank empfiehlt.

verwandte Informationen