Heliosurge
(Dan DeMontmorency)
27. Dezember 2025 um 22:58
3
Hallo Ed, sehr valide Punkte. Ich erinnere mich, dass ein Mitglied vor einiger Zeit ein Skript zum Sichern auf einem anderen System erstellt hat. Ich muss suchen und nachsehen.
Hier ist ein Auszug aus dem ursprünglichen Beitrag. Canapin hat eine gute Antwort mit einem Link zum Sichern auf Google Drive/Dropbox) sowie.
Lhc_fl:
Kürzlich stieß eine Freundin von mir auf das Problem, dass der VPS-Anbieter plötzlich und ohne Vorankündigung den Betrieb einstellte. Leider wählte sie aus Kostengründen einen Nischenanbieter – einen, der nicht einmal das Herunterladen von Daten anbot. Was noch schlimmer ist: Sie hat nicht die Gewohnheit, regelmäßig Backups herunterzuladen. Über Nacht verschwand ihre Website zusammen mit allen darauf befindlichen Daten.
Davon schockiert schrieb ich ein Powershell-Skript, das automatisch regelmäßig Backups von Ihrem Server auf Ihren lokalen Computer herunterlädt, ohne dass zusätzliche Objektspeicherdienste gekauft oder einen Cent für andere Dinge ausgegeben werden müssen. Alles, was Sie benötigen, ist ein Windows-Computer, den Sie regelmäßig benutzen (und der über viel Festplattenspeicher verfügt) und der mit dem Internet verbunden ist.
Das Skript löscht automatisch Backups, die älter als 5 Tage sind. Sie können das automatische Sicherungsintervall und die lokal gespeicherte älteste Sicherungszeit nach Bedarf einstellen.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Starte den Downloadvorgang für die Discourse-Sicherung..."
Write-Output '------------------------'
Write-Output "Rufe die neueste Sicherungsdatei ab..."
Write-Output ''
while ($true) {
$filename = ''
while ($true) {
try {
Write-Output "> ssh -p $ssh_port $ssh_address 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'"
Write-Output ''
$filename = ssh -p $ssh_port "$ssh_address" 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'
break
}
catch {
$filename = ''
Write-Output "Abruf fehlgeschlagen... Hier ist das Protokoll:"
Write-Output '-------------'
Write-Output $_
$answer = Read-Host "Möchten Sie erneut abrufen? (j/N)"
if ($answer -ne 'j') {
break
}
Write-Output ''
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Fehler: Dateiname $filename konnte nicht abgerufen werden"
Write-Output ''
$answer = Read-Host 'Erneut versuchen?(j/N)'
if ($answer -eq 'j') {
}
else {
exit 1
}
}
else {
Write-Output "Neueste Sicherung: $filename"
Write-Output ''
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename existiert bereits. Möchten Sie es erneut herunterladen?(j/N)"
Write-Output ''
if ($answer -ne 'j') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Starte den Download..."
Write-Output ''
while ($true) {
try {
Write-Output "scp -p $ssh_port ${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename .\\backups\\"
Write-Output ''
scp -p $ssh_port "${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename" .\\backups\\
Write-Output "Download abgeschlossen"
Write-Output ''
break
}
catch {
Write-Output "Download fehlgeschlagen >_<... Das Protokoll lautet:"
Write-Output ''
Write-Output $_
$answer = Read-Host "Erneut herunterladen? (j/N)"
Write-Output ''
if ($answer -ne 'j') {
break
}
}
}
}
Write-Output "Versuche, alte Sicherungsdateien zu bereinigen..."
Write-Output ''
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Lösche alte Sicherungsdatei $file ..."
Write-Output ''
$file.Delete()
$count = $count + 1
} catch {
Write-Output "Ein Fehler ist beim Löschen der alten Sicherungsdatei $file aufgetreten >_<"
Write-Output '-------------------'
Write-Output $_
Write-Output '-------------------'
}
}
}
if ($count -ge 0) {
Write-Output "Habe $count alte Sicherungsdateien bereinigt"
Write-Output ''
}
else {
Write-Output 'Keine alten Sicherungsdateien zum Bereinigen erforderlich'
Write-Output ''
}
Pause
exit 0
}
}
Speichern Sie das obige Skript als scriptname.ps1 in dem Pfad, in dem Sie das Backup herunterladen möchten. Versuchen Sie „Mit Powershell ausführen“. Wenn dies erfolgreich ist, können Sie mit dem nächsten Schritt fortfahren.
So planen Sie eine Aufgabe
Suchen Sie nach „Geplante Aufgaben“.
Doppelklicken Sie auf „Geplante Aufgabe hinzufügen“. Der Assistent für geplante Aufgaben wird angezeigt.
Klicken Sie auf Weiter und dann auf Durchsuchen. Das Dialogfeld „Programm zur Planung auswählen“ wird angezeigt.
Navigieren Sie zu dem von Ihnen erstellten Skript, klicken Sie darauf und dann auf Öffnen. Sie kehren zum Assistenten für geplante Aufgaben zurück.
Geben Sie einen Namen für die Aufgabe ein oder behalten Sie den Standardnamen bei, der der Dateiname ist, geben Sie an, wie oft das Skript ausgeführt werden soll, und klicken Sie dann auf Weiter.
Geben Sie die Startzeit und das Datum (falls Sie Täglich, Wöchentlich oder Monatlich usw. angegeben haben) und die Wiederholung an und klicken Sie dann auf Weiter. Dieser Eintrag sollte mit dem automatischen Sicherungszyklus Ihres Discourse übereinstimmen
Geben Sie den Benutzernamen und das Kennwort für das Konto ein, das das Skript ausführen soll, und klicken Sie dann auf Weiter.
Wenn Sie erweiterte Eigenschaften konfigurieren möchten, aktivieren Sie das Kontrollkästchen und klicken Sie dann auf Fertig stellen.
@Canapin muss bei der Launcher-Rebuild-App nicht Folgendes ausgeführt werden:
./launcher r build app
Das ist nur, wie ich es gewohnt bin, es von anderen Dokumenten hier auf der Seite auszuführen. Wie ich jedoch gelernt habe, gibt es oft viele Möglichkeiten, Dinge zu tun. Lol
Schöner Abriss, praktisch.
1 „Gefällt mir“