OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

sync-backup.php

3 KB
<?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'];
});