From f43859ba5fdb532699ebf3815c8d1880228a43ef Mon Sep 17 00:00:00 2001 From: M_Viper Date: Sun, 25 Oct 2026 17:47:16 +0000 Subject: [PATCH] Upload via GUI (338 Dateien) --- DeskHub-Webseite/cron/process_backups.php | 20 ++++++++++++++++++++ DeskHub-Webseite/cron/status_checks.php | 15 +++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 DeskHub-Webseite/cron/status_checks.php diff --git a/DeskHub-Webseite/cron/process_backups.php b/DeskHub-Webseite/cron/process_backups.php index 5c8a861e..a831b2e3 100644 --- a/DeskHub-Webseite/cron/process_backups.php +++ b/DeskHub-Webseite/cron/process_backups.php @@ -59,8 +59,25 @@ function run_process_backups(PDO $pdo, bool $verbose = false, bool $force = fals return ['ran' => false, 'ok' => true, 'log' => $log]; } + // Nur ein Backup gleichzeitig: Der echte Cronjob, der eingebaute Hintergrunddienst und der Knopf auf der Seite „Backup“ dürfen sich nicht + // überlappen. „Letztes Backup“ wird erst NACH dem Erstellen eingetragen; ein zweiter Lauf würde das Backup sonst weiterhin als fällig sehen. + if (!backup_lock_acquire($pdo)) { + $log[] = date('Y-m-d H:i:s') . ' – Es läuft bereits ein Backup, dieser Lauf wird übersprungen.'; + return ['ran' => false, 'ok' => true, 'log' => $log]; + } + if (!$force) { // Ein anderer Lauf kann gerade erst fertig geworden sein: nach dem Erhalt der Sperre noch einmal prüfen + $lastNow = bset($pdo, 'last_auto_backup') ?: '1970-01-01'; + $days = ['daily' => 1, 'weekly' => 7, 'monthly' => 30][$schedule] ?? null; + if ($days === null || strtotime($lastNow) >= strtotime("-{$days} days", time())) { + backup_lock_release($pdo); + $log[] = date('Y-m-d H:i:s') . ' – Kein Backup nötig (ein anderer Lauf war gerade schneller).'; + return ['ran' => false, 'ok' => true, 'log' => $log]; + } + } + $log[] = date('Y-m-d H:i:s') . ' – Starte Backup...'; + try { $result = create_backup(); if (!$result['ok']) { @@ -83,6 +100,9 @@ function run_process_backups(PDO $pdo, bool $verbose = false, bool $force = fals : "INSERT INTO backup_settings (key_name, value, updated_at) VALUES ('last_auto_backup', ?, ?) ON DUPLICATE KEY UPDATE value=VALUES(value), updated_at=VALUES(updated_at)"; $pdo->prepare($backupSettingSql)->execute([$backupTime, $backupTime]); + } finally { + backup_lock_release($pdo); // auch bei Fehlern und vorzeitigem Abbruch freigeben + } // ── FTP-Upload (optional) ──────────────────────────────────────────────────── $ftpHost = bset($pdo, 'ftp_host'); diff --git a/DeskHub-Webseite/cron/status_checks.php b/DeskHub-Webseite/cron/status_checks.php new file mode 100644 index 00000000..4a2349c0 --- /dev/null +++ b/DeskHub-Webseite/cron/status_checks.php @@ -0,0 +1,15 @@ + $count, 'log' => ['Statusprüfung abgeschlossen: ' . $count . ' Dienst(e) geprüft.']]; +} + +if (php_sapi_name() === 'cli') { + $result = run_status_checks(get_db(), true); + foreach ($result['log'] as $line) echo '[' . date('Y-m-d H:i:s') . '] ' . $line . PHP_EOL; +}