Quelltext des aktuellen Standes
<?php
// Synchronisiert Backup-Daten (Veeam + Proxmox Backup Server) und benachrichtigt
// bei neuen Fehlern.
//
// Hinweis: Dieses Legacy-Script wird durch den Unified Scheduler ersetzt
// (OpenNIT\Cron\Handlers\BackupSyncHandler, konfigurierbar unter /admin/cronjobs).
// Es delegiert seit der Proxmox-Integration vollständig an den BackupSyncService,
// damit beide Quellen einheitlich verarbeitet werden.
//
// Cron-Empfehlung (alle 30 Minuten):
// */30 * * * * /usr/bin/php /pfad/zu/bin/sync-backup.php >> /pfad/zu/storage/logs/sync-backup.log 2>&1
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../bootstrap.php';
use OpenNIT\Core\Database;
use OpenNIT\Audit\AuditLogger;
use OpenNIT\Services\BackupSyncService;
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->load();
$dbConfig = require __DIR__ . '/../config/database.php';
$runtimeConfig = [];
$runtimeFile = __DIR__ . '/../config/runtime.php';
if (file_exists($runtimeFile)) {
$runtimeConfig = include $runtimeFile;
}
$timezone = $runtimeConfig['app']['timezone'] ?? 'Europe/Berlin';
date_default_timezone_set($timezone);
$db = new Database($dbConfig);
$auditLogger = new AuditLogger($db);
$appKey = $_ENV['APP_KEY'] ?? '';
// ── Cronjob-Tracking ───────────────────────────────────────────────────────────
function trackCronjob(Database $db, string $jobName, callable $callback): void
{
try {
$runId = $db->insert('cronjob_runs', [
'job_name' => $jobName,
'started_at' => date('Y-m-d H:i:s'),
'status' => 'running',
]);
} catch (\Throwable $e) {
echo date('Y-m-d H:i:s') . " - [WARNUNG] Cronjob-Tracking fehlgeschlagen: " . $e->getMessage() . "\n";
$callback();
return;
}
try {
$result = $callback();
$message = is_string($result) ? $result : null;
$count = is_int($result) ? $result : 0;
$db->update('cronjob_runs', [
'finished_at' => date('Y-m-d H:i:s'),
'status' => 'success',
'message' => $message,
'items_count' => $count,
], 'id = ?', [$runId]);
} catch (\Throwable $e) {
$db->update('cronjob_runs', [
'finished_at' => date('Y-m-d H:i:s'),
'status' => 'failed',
'message' => $e->getMessage(),
], 'id = ?', [$runId]);
echo date('Y-m-d H:i:s') . " - [FEHLER] {$jobName}: " . $e->getMessage() . "\n";
}
}
// ── Modul prüfen ─────────────────────────────────────────────────────────────
$modules = $runtimeConfig['modules'] ?? [];
if (empty($modules['backup'])) {
echo date('Y-m-d H:i:s') . " - Backup-Modul deaktiviert, überspringe.\n";
exit(0);
}
// ── Sync durchführen (beide Quellen via BackupSyncService) ─────────────────────
trackCronjob($db, 'backup_sync', function () use ($db, $auditLogger, $appKey): int {
set_time_limit(0);
$service = new BackupSyncService($db, $auditLogger, $appKey);
$result = $service->sync();
echo date('Y-m-d H:i:s') . " - " . $result['message'] . "\n";
return (int)$result['jobs'];
});