Ich hatte reproduzierbar doppelte Web- und DB-Backups (physisch zwei Archive pro Laufzeitfenster auf der HDD).
Es existierte kein doppelter Cron-Eintrag in der root-crontab.
Nach intensiver Analyse ist die Ursache eindeutig:
Das Backup-Subsystem von ISPConfig ist nicht gegen parallele cron.sh-Instanzen abgesichert.
Es existiert weder:
Wenn cron.sh erneut startet, während ein vorheriger Lauf noch Web-/DB-Backups erzeugt,
werden identische Backup-Jobs ein weiteres Mal abgearbeitet → doppelte Archive entstehen.
Das ist kein Bedienfehler und kein „Cron doppelt eingetragen“.
Ein einzelner Cron-Eintrag reicht aus, wenn:
Minute 00 → cron.sh startet → Backup läuft
Minute 05 → cron.sh startet erneut → erster Lauf noch aktiv
Minute 10 → ggf. dritter Start
Da das Backup-Plugin keinen Re-Entry-Schutz besitzt, werden Jobs mehrfach verarbeitet.
Die Doppelung entstand ausschließlich durch überlappende Prozesse desselben Eintrags.
Das ist entscheidend.
Dazu ist ein globaler Lock notwendig, der die gesamte Laufzeit kapselt.
*/5 * * * * /usr/bin/flock -n /var/lock/ispconfig-cron.lock -c '/usr/local/ispconfig/server/cron.sh >> /var/log/ispconfig/cron.log 2>&1'
Wichtig:
sondern in fehlender Parallelitätssicherung innerhalb des ISPConfig-Backup-Subsystems.
Solange cron.sh ohne globale Prozesssperre läuft und das Backup-Plugin keinen eigenen Re-Entry-Schutz implementiert,
kann es bei realistischen Laufzeiten zu doppelten Backups kommen.
Die saubere Lösung ist eine globale Lock-Klammerung von cron.sh.
PS: Musste das auch mal loswerden weil man hier sonst immer schnell abgewatscht wird, passiert ja nur bei Dir etc. und den Unterstellungen, man würde nur immer an den Core Dateien etwas ändern. Was man natürlich auch dann macht wen die Fehler tatsächlich auch ersichtlich sind und man nicht warten kann oder will, bis das Problem eventuell erkannt und gelöst wird.
Es existierte kein doppelter Cron-Eintrag in der root-crontab.
Nach intensiver Analyse ist die Ursache eindeutig:
Ursache
cron.sh kann parallel laufen, wenn ein Backup-Lauf länger dauert als das Cron-Intervall.Das Backup-Subsystem von ISPConfig ist nicht gegen parallele cron.sh-Instanzen abgesichert.
Es existiert weder:
- ein globaler Prozess-Lock innerhalb von cron.sh
- noch ein Lock pro Backup-Job / Domain / Datenbank
- noch eine Dedup-Logik im Backup-Plugin
Wenn cron.sh erneut startet, während ein vorheriger Lauf noch Web-/DB-Backups erzeugt,
werden identische Backup-Jobs ein weiteres Mal abgearbeitet → doppelte Archive entstehen.
Das ist kein Bedienfehler und kein „Cron doppelt eingetragen“.
Ein einzelner Cron-Eintrag reicht aus, wenn:
- Backup-Dauer > Cron-Intervall
- keine wirksame Prozesssperre existiert
Reproduktionslogik
Beispiel:- cron.sh läuft alle 5 Minuten
- Web-Backup dauert 8–15 Minuten
- keine funktionierende Prozesssperre aktiv
Minute 00 → cron.sh startet → Backup läuft
Minute 05 → cron.sh startet erneut → erster Lauf noch aktiv
Minute 10 → ggf. dritter Start
Da das Backup-Plugin keinen Re-Entry-Schutz besitzt, werden Jobs mehrfach verarbeitet.
Wichtig: Kein zweiter Cron-Eintrag notwendig
Es gab zu keinem Zeitpunkt zwei aktive cron.sh-Einträge in der Crontab.Die Doppelung entstand ausschließlich durch überlappende Prozesse desselben Eintrags.
Das ist entscheidend.
Lösung (technisch korrekt und stabil)
Es muss sichergestellt werden, dass zu jedem Zeitpunkt nur eine Instanz von cron.sh laufen kann.Dazu ist ein globaler Lock notwendig, der die gesamte Laufzeit kapselt.
Korrekte Variante mit flock und -c
*/5 * * * * /usr/bin/flock -n /var/lock/ispconfig-cron.lock -c '/usr/local/ispconfig/server/cron.sh >> /var/log/ispconfig/cron.log 2>&1'
Wichtig:
- flock muss mit -c verwendet werden
- das gesamte cron.sh muss innerhalb des Locks laufen
- der Lock muss für die komplette Laufzeit gehalten werden
- -n verhindert parallelen Start
- Web-Backups laufen exakt einmal
- DB-Backups laufen exakt einmal
- keine doppelten Archive mehr
Fazit
Das Problem liegt nicht in einer falschen Crontab-Konfiguration,sondern in fehlender Parallelitätssicherung innerhalb des ISPConfig-Backup-Subsystems.
Solange cron.sh ohne globale Prozesssperre läuft und das Backup-Plugin keinen eigenen Re-Entry-Schutz implementiert,
kann es bei realistischen Laufzeiten zu doppelten Backups kommen.
Die saubere Lösung ist eine globale Lock-Klammerung von cron.sh.
PS: Musste das auch mal loswerden weil man hier sonst immer schnell abgewatscht wird, passiert ja nur bei Dir etc. und den Unterstellungen, man würde nur immer an den Core Dateien etwas ändern. Was man natürlich auch dann macht wen die Fehler tatsächlich auch ersichtlich sind und man nicht warten kann oder will, bis das Problem eventuell erkannt und gelöst wird.