Récemment, une amie a rencontré le problème du fournisseur de VPS qui a soudainement cessé ses activités sans préavis. Malheureusement, pour des raisons de coût, elle a choisi un fournisseur de niche, qui n’offrait même pas de téléchargement de données. Pire encore, elle n’a pas pris l’habitude de télécharger régulièrement des sauvegardes. Du jour au lendemain, son site a disparu, ainsi que toutes les données qu’il contenait.
Choqué par cela, j’ai écrit un script Powershell qui téléchargera automatiquement les sauvegardes de votre serveur sur votre ordinateur local régulièrement, sans avoir à acheter de services de stockage d’objets supplémentaires ni à dépenser un centime pour d’autres choses. Tout ce dont vous avez besoin est un ordinateur Windows que vous utilisez régulièrement (et qui dispose de beaucoup d’espace disque) et qui est connecté à Internet.
Le script nettoiera automatiquement les sauvegardes datant de plus de 5 jours. Vous pouvez définir l’intervalle de sauvegarde automatique et l’ancienneté de la sauvegarde sauvegardée localement selon vos besoins.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Starting Discourse backup download task..."
Write-Output '------------------------'
Write-Output "Fetching the latest backup file..."
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 "Failed to fetch... Here is the log:"
Write-Output '-------------'
Write-Output $_
$answer = Read-Host "Do you want to re-fetch? (y/N)"
if ($answer -ne 'y') {
break
}
Write-Output ''
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Error: Failed to fetch file name $filename"
Write-Output ''
$answer = Read-Host 'Retry?(y/N)'
if ($answer -eq 'y') {
}
else {
exit 1
}
}
else {
Write-Output "Latest backup: $filename"
Write-Output ''
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename already exists. Do you want to download it again?(y/N)"
Write-Output ''
if ($answer -ne 'y') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Start downloading..."
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 completed"
Write-Output ''
break
}
catch {
Write-Output "Download failed >_<... The following is the log:"
Write-Output ''
Write-Output $_
$answer = Read-Host "Download again? (y/N)"
Write-Output ''
if ($answer -ne 'y') {
break
}
}
}
}
Write-Output "Start trying to clean old backup files..."
Write-Output ''
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Delete old backup file $file ..."
Write-Output ''
$file.Delete()
$count = $count + 1
} catch {
Write-Output "An error occurred while deleting old backup file $file >_<"
Write-Output '-------------------'
Write-Output $_
Write-Output '-------------------'
}
}
}
if ($count -ge 0) {
Write-Output "Cleaned $count old backup files"
Write-Output ''
}
else {
Write-Output 'No old backup files need to clean up'
Write-Output ''
}
Pause
exit 0
}
}
Enregistrez le script ci-dessus sous le nom scriptname.ps1 dans le chemin où vous souhaitez télécharger la sauvegarde. Essayez “Exécuter avec Powershell”. Si cela réussit, vous pouvez passer à l’étape suivante.
Pour planifier une tâche
- Recherchez “Planificateur de tâches”.
- Double-cliquez sur Ajouter une tâche planifiée. L’Assistant Planificateur de tâches apparaît.
- Cliquez sur Suivant, puis sur Parcourir. La boîte de dialogue Sélectionner un programme à planifier apparaît.
- Accédez au script que vous avez créé, cliquez dessus, puis sur Ouvrir. Vous revenez à l’Assistant Planificateur de tâches.
- Donnez un nom à la tâche, ou conservez le nom par défaut qui est le nom du fichier, spécifiez la fréquence d’exécution du script, puis cliquez sur Suivant.
- Spécifiez l’heure et la date de début (si vous avez spécifié Quotidien, Hebdomadaire ou Mensuel, etc.) et la récurrence, puis cliquez sur Suivant. Cet élément doit correspondre au cycle de sauvegarde automatique de votre discourse.
- Tapez le nom d’utilisateur et le mot de passe du compte qui exécutera le script, puis cliquez sur Suivant.
- Si vous souhaitez configurer des propriétés avancées, cochez la case, puis cliquez sur Terminer.


