# Lexware DB Sync – Loop-Wrapper # Laeuft als dauerhafter Prozess (Scheduled Task bei Systemstart). # Startet push-dump.ps1 und wartet danach immer 120 Sekunden, # unabhaengig davon wie lange der Lauf selbst gedauert hat. $script = "C:\lexware-db-connect\push-dump.ps1" $logFile = "C:\Users\Administrator\Desktop\LexWare-DB-Mirror.log" $utf8NoBom = [System.Text.UTF8Encoding]::new($false) $waitAfterRun = 120 # Sekunden Pause nach jedem Lauf function Write-LoopLog([string]$msg) { $ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss" $entry = "[$ts] [LOOP] $msg`n" [System.IO.File]::AppendAllText($logFile, $entry, $utf8NoBom) } Write-LoopLog "Loop gestartet (Interval: ${waitAfterRun}s nach Lauf-Ende)" while ($true) { # Fallback: nur dumpen wenn Logical Replication nicht aktiv ist $replOk = $false try { $sshKey = "C:\lexware-db-connect\ssh\id_rsa" $result = & ssh -i $sshKey -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@192.168.115.113 ` "sudo -u postgres psql -d f1 -tAc 'SELECT COUNT(*) FROM pg_stat_subscription WHERE received_lsn IS NOT NULL;' 2>/dev/null" $replOk = ([int]($result.Trim()) -ge 5) } catch {} if ($replOk) { Start-Sleep -Seconds $waitAfterRun continue } Write-LoopLog "Replikation inaktiv – starte Dump-Fallback" $sw = [System.Diagnostics.Stopwatch]::StartNew() & powershell.exe -NonInteractive -ExecutionPolicy Bypass -File $script $sw.Stop() $elapsed = [int]$sw.Elapsed.TotalSeconds $wait = [Math]::Max(10, $waitAfterRun - $elapsed) Write-LoopLog "Lauf beendet nach ${elapsed}s - naechster Start in ${wait}s" Start-Sleep -Seconds $wait }