46 lines
1.7 KiB
PowerShell
46 lines
1.7 KiB
PowerShell
# 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
|
||
}
|