Zum Thema Cron / Zeitplan

Prinzipiell gibt es zwei Möglichkeiten, die Sicherung zeitgesteuert auszuführen:

1. Per "echtem" Cronjob (unter Windows "Aufgabe")
2. Per "integriertem" Cronjob

Beide haben natürlich ihre Haken und Ösen.

Echter Cronjob

Je nachdem, was man so zu zahlen bereit ist, kann es durchaus sein, dass einem beim Provider Cronjobs zur Verfügung stehen. Wer das nicht hat, kann externe Dienste dafür in Anspruch nehmen, die es teilweise kostenlos gibt. Im Fall von syncData würde das so funktionieren, dass man dem Cron-Dienst die URL der backup.php gibt; dieser wird zur Absicherung ein Key angehängt. Zu bedenken ist allerdings, dass dieser Key unter Umständen "abgelauscht" werden kann. Ich plane derzeit nicht, den Key irgendwie zusätzlich zu verschlüsseln, da ein Angreifer hiermit maximal eine Datensicherung auslösen kann. Natürlich ist das durchaus geeignet, um eine DDos Attacke auszuführen, aber für den Moment schätze ich das Risiko als relativ gering ein. Ich empfehle allerdings dringend die Verwendung von https.

Vorteil:
Der Zeitplan wird auch dann korrekt berücksichtigt, wenn zu dieser Zeit gerade keine Zugriffe auf die Seite stattfinden.

Nachteil:
Siehe oben, man muss ggfs. eine URL an einen externen Dienst herausgeben, die eine nicht unerhebliche Last erzeugen kann.

Integrierter Cronjob

Da so ein CMS nicht ununterbrochen läuft - es ist kein Dämon oder Dienst -, muss man bei einem integrierten Cronjob mehr oder weniger darauf hoffen, dass zeitnah zur Ausführungszeit irgendein Zugriff auf die Seite stattfindet. Nun kann beispielsweise durch ein Droplet eine Aktion ausgelöst werden, die nachschaut, ob eine Ausführung ansteht. Wenn ja, wird die Datensicherung angestartet und die Ausführung vermerkt.

Vorteil:
Alles läuft intern ab, man muss keine URL herausgeben.

Nachteil:
Abgesehen von der Unsicherheit, ob und wann die Datensicherung tatsächlich stattfindet, löst ein einfacher Besucher (egal ob "echte Person" oder z.B. ein Crawler) eine unter Umständen langwierige Aktion aus. Zudem können sich verschiedene Zeitpläne in die Quere kommen, wenn man z.B. sowohl einen täglichen als auch einen monatlichen Job hat, die beide fällig wären; da kann dann halt nur einer laufen. Wenn das nicht wirklich zuverlässig klappt, legt man unter Umständen den ganzen Webserver lahm - was der Provider bestimmt nicht mit Begeisterung aufnimmt.

Kombiniere...

Die Lösung könnte sein, beides zu kombinieren. Per externem Cronjob irgendeine Seite aufrufen lassen (=kein Key nötig), die das Droplet beinhaltet, das nachguckt, ob ein Job ansteht. Die Seite selbst kann versteckt sein, so dass sie kein normaler Besucher so einfach zu sehen kriegt. Natürlich sollte vermieden werden, dass Google & Co. die Seite finden, das ist aber Aufgabe des Core bzw. der lokalen Einstellungen, nicht des Moduls.