Heliosurge
(Dan DeMontmorency)
27 Dicembre 2025, 10:58pm
3
Ciao Ed, punti molto validi. Un membro tempo fa ha creato uno script per il backup su un altro sistema, se ricordo bene. Dovrò fare una ricerca e controllare.
Ecco un estratto dal post originale. Canapin ha una buona risposta con un link per il backup su Google Drive/Dropbox.
Lhc_fl:
Recentemente, un mio amico si è imbattuto nel problema che il fornitore di VPS ha chiuso improvvisamente senza preavviso. Purtroppo, per risparmiare, ha scelto un fornitore di nicchia, uno che non offriva nemmeno il download dei dati. Peggio ancora, non aveva nemmeno l’abitudine di scaricare regolarmente i backup. Da un giorno all’altro, il suo sito è scomparso, insieme a tutti i dati in esso contenuti.
Scioccato da questo, ho scritto uno script Powershell che scaricherà automaticamente i backup dal tuo server al tuo computer locale regolarmente senza dover acquistare servizi di archiviazione oggetti aggiuntivi o spendere un centesimo per altre cose. Tutto ciò di cui hai bisogno è un computer Windows che usi regolarmente (e che abbia molto spazio su disco) e che sia connesso a Internet.
Lo script pulirà automaticamente i backup di 5 giorni fa. Puoi impostare l’intervallo di backup automatico e il tempo del backup più vecchio salvato localmente in base alle tue esigenze.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Avvio attività di download backup di Discourse..."
Write-Output '------------------------'
Write-Output "Recupero del file di backup più recente..."
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 "Recupero fallito... Ecco il log:"
Write-Output '-------------'
Write-Output $_
$answer = Read-Host "Vuoi recuperare di nuovo? (s/N)"
if ($answer -ne 's') {
break
}
Write-Output ''
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Errore: impossibile recuperare il nome del file $filename"
Write-Output ''
$answer = Read-Host 'Riprova?(s/N)'
if ($answer -eq 's') {
}
else {
exit 1
}
}
else {
Write-Output "Backup più recente: $filename"
Write-Output ''
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename esiste già. Vuoi scaricarlo di nuovo?(s/N)"
Write-Output ''
if ($answer -ne 's') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Avvio 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 completato"
Write-Output ''
break
}
catch {
Write-Output "Download fallito >_<... Il seguente è il log:"
Write-Output ''
Write-Output $_
$answer = Read-Host "Scarica di nuovo? (s/N)"
Write-Output ''
if ($answer -ne 's') {
break
}
}
}
}
Write-Output "Avvio tentativo di pulizia dei vecchi file di backup..."
Write-Output ''
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Eliminazione vecchio file di backup $file ..."
Write-Output ''
$file.Delete()
$count = $count + 1
} catch {
Write-Output "Si è verificato un errore durante l'eliminazione del vecchio file di backup $file >_<"
Write-Output '-------------------'
Write-Output $_
Write-Output '-------------------'
}
}
}
if ($count -ge 0) {
Write-Output "Puliti $count vecchi file di backup"
Write-Output ''
}
else {
Write-Output 'Nessun vecchio file di backup da pulire'
Write-Output ''
}
Pause
exit 0
}
}
Salva questo script come scriptname.ps1 nel percorso in cui desideri scaricare il backup. Prova “Esegui con Powershell”. Se ha successo, puoi procedere al passo successivo.
Per pianificare un’attività
Cerca “Utilità di pianificazione”.
Fai doppio clic su Aggiungi attività pianificata. Appare la procedura guidata per l’utilità di pianificazione.
Fai clic su Avanti, quindi fai clic su Sfoglia. Appare la finestra di dialogo Seleziona programma da pianificare.
Naviga fino allo script che hai creato, fai clic su di esso, quindi su Apri. Si torna alla procedura guidata per l’utilità di pianificazione.
Fornisci un nome per l’attività, o mantieni quello predefinito, che è il nome del file, specifica ogni quanto eseguire lo script, quindi fai clic su Avanti.
Specifica l’ora e la data di inizio (se hai specificato Giornaliero, Settimanale, Mensile, ecc.) e la ricorrenza, quindi fai clic su Avanti. Questo elemento dovrebbe corrispondere al ciclo di backup automatico del tuo discourse
Digita il nome utente e la password per l’account che eseguirà lo script, quindi fai clic su Avanti.
Se desideri configurare proprietà avanzate, seleziona la casella di controllo, quindi fai clic su Fine.
@Canapin con l’applicazione di rebuild del launcher, non deve essere eseguito come
./launcher r build app
Questo è solo il modo in cui ho sempre usato eseguirlo da altri documenti qui sul sito. Come ho imparato, ci sono spesso molti modi per fare le cose. Lol
Bella descrizione, utile.
1 Mi Piace