في الآونة الأخيرة، واجهت صديقتي مشكلة مزود خدمة الخادم الافتراضي الخاص (VPS) الذي أفلس فجأة دون سابق إنذار. للأسف، من أجل التوفير، اختارت مزودًا غير معروف - لم يكن يقدم حتى تنزيل البيانات. والأسوأ من ذلك أنها لا تملك عادة تنزيل النسخ الاحتياطية بانتظام. بين عشية وضحاها، اختفى موقعها، إلى جانب جميع البيانات الموجودة عليه.
صُدمت من هذا، كتبت برنامج PowerShell نصي يقوم بتنزيل النسخ الاحتياطية تلقائيًا من خادمك إلى جهاز الكمبيوتر المحلي الخاص بك بانتظام دون الحاجة إلى شراء أي خدمات تخزين إضافية أو إنفاق فلس واحد على أشياء أخرى. كل ما تحتاجه هو جهاز كمبيوتر يعمل بنظام Windows تستخدمه بانتظام (ولديه مساحة كافية على القرص الصلب) ومتصل بالإنترنت.
سيقوم البرنامج النصي تلقائيًا بتنظيف النسخ الاحتياطية من 5 أيام مضت. يمكنك تعيين فاصل النسخ الاحتياطي التلقائي وأقدم وقت للنسخ الاحتياطي محفوظ محليًا وفقًا لاحتياجاتك.
$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
}
}
احفظ البرنامج النصي أعلاه باسم scriptname.ps1 في المسار الذي ترغب في تنزيل النسخة الاحتياطية منه. جرب “تشغيل باستخدام PowerShell”. إذا نجح الأمر، يمكنك المتابعة إلى الخطوة التالية.
جدولة مهمة
- ابحث عن “المهام المجدولة”.
- انقر نقرًا مزدوجًا فوق “إضافة مهمة مجدولة”. يظهر معالج المهام المجدولة.
- انقر فوق “التالي”، ثم انقر فوق “استعراض”. يظهر مربع حوار “تحديد برنامج للجدولة”.
- انتقل إلى البرنامج النصي الذي أنشأته، وانقر عليه، ثم انقر فوق “فتح”. تعود إلى معالج المهام المجدولة.
- قم بتوفير اسم للمهمة، أو احتفظ بالاسم الافتراضي، وهو اسم الملف، وحدد عدد مرات تشغيل البرنامج النصي، ثم انقر فوق “التالي”.
- حدد وقت البدء والتاريخ (إذا حددت يوميًا، أسبوعيًا، شهريًا، إلخ) والتكرار، ثم انقر فوق “التالي”. يجب أن يتطابق هذا العنصر مع دورة النسخ الاحتياطي التلقائي لـ discourse الخاص بك
- اكتب اسم المستخدم وكلمة المرور للحساب الذي سيقوم بتشغيل البرنامج النصي، ثم انقر فوق “التالي”.
- إذا كنت ترغب في تكوين خصائص متقدمة، فحدد مربع الاختيار، ثم انقر فوق “إنهاء”.


