ساخت اسکریپت بکآپگیری با پایتون: اتوماسیون و اسکریپتنویسی
بکآپگیری منظم از دادهها یکی از حیاتیترین جنبههای مدیریت سیستم و اطلاعات است. از دست رفتن دادهها میتواند ناشی از عوامل متعددی مانند خرابی سختافزار، خطاهای انسانی، حملات سایبری یا بلایای طبیعی باشد. یک اسکریپت بکآپگیری خودکار میتواند به طور قابل توجهی خطر از دست رفتن دادهها را کاهش دهد و فرآیند بازیابی را در صورت بروز مشکل تسهیل کند. در این مقاله، به آموزش ساخت یک اسکریپت بکآپگیری با استفاده از زبان برنامهنویسی پایتون میپردازیم. این آموزش در دسته ‘اتوماسیون و اسکریپتنویسی’ قرار میگیرد و برای افراد با دانش پایه پایتون مناسب است.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را دارید:
- نصب پایتون: پایتون باید بر روی سیستم شما نصب شده باشد.
- دانش پایه پایتون: آشنایی با مفاهیم اولیه پایتون مانند متغیرها، حلقهها، شرطها و توابع ضروری است.
- دسترسی به فایلها و دایرکتوریها: اسکریپت باید دسترسی خواندن به فایلها و دایرکتوریهایی که میخواهید از آنها بکآپ بگیرید و دسترسی نوشتن به محل ذخیره بکآپها داشته باشد.
مراحل ساخت اسکریپت
1. تعریف متغیرها و پارامترها
در ابتدا، متغیرهایی را برای ذخیره اطلاعات مهم مانند مسیر منبع (فایلها یا دایرکتوریهایی که باید بکآپ گرفته شوند)، مسیر مقصد (محل ذخیره بکآپها)، نام فایل بکآپ و فرمت فشردهسازی تعریف میکنیم.
source_path = "/path/to/source/directory" # مسیر دایرکتوری یا فایل منبع backup_path = "/path/to/backup/directory" # مسیر دایرکتوری مقصد برای ذخیره بکآپ backup_name = "backup" # نام فایل بکآپ (بدون پسوند) compression_format = "zip" # فرمت فشردهسازی (zip, tar, gzip, bz2)
2. ایجاد تابع برای بکآپگیری
اکنون یک تابع ایجاد میکنیم که فرآیند بکآپگیری را انجام دهد. این تابع باید مسیر منبع، مسیر مقصد، نام فایل بکآپ و فرمت فشردهسازی را به عنوان ورودی دریافت کند.
import os
import zipfile
import tarfile
import gzip
import bz2
def create_backup(source_path, backup_path, backup_name, compression_format):
"""
ایجاد یک بکآپ فشرده از یک دایرکتوری یا فایل.
"""
try:
if not os.path.exists(backup_path):
os.makedirs(backup_path)
if compression_format == "zip":
backup_file = os.path.join(backup_path, backup_name + ".zip")
with zipfile.ZipFile(backup_file, "w", zipfile.ZIP_DEFLATED) as zipf:
for root, _, files in os.walk(source_path):
for file in files:
file_path = os.path.join(root, file)
zipf.write(file_path, os.path.relpath(file_path, source_path))
elif compression_format == "tar":
backup_file = os.path.join(backup_path, backup_name + ".tar")
with tarfile.open(backup_file, "w") as tarf:
tarf.add(source_path, arcname=os.path.basename(source_path))
elif compression_format == "gzip":
backup_file = os.path.join(backup_path, backup_name + ".tar.gz")
with tarfile.open(backup_file, "w:gz") as tarf:
tarf.add(source_path, arcname=os.path.basename(source_path))
elif compression_format == "bz2":
backup_file = os.path.join(backup_path, backup_name + ".tar.bz2")
with tarfile.open(backup_file, "w:bz2") as tarf:
tarf.add(source_path, arcname=os.path.basename(source_path))
else:
print("فرمت فشردهسازی نامعتبر است.")
return False
print(f"بکآپ با موفقیت در {backup_file} ایجاد شد.")
return True
except Exception as e:
print(f"خطا در ایجاد بکآپ: {e}")
return False
3. مدیریت خطاها
در تابع `create_backup` از بلوک `try…except` برای مدیریت خطاها استفاده کردیم. این کار باعث میشود که در صورت بروز هرگونه خطا در فرآیند بکآپگیری، اسکریپت متوقف نشود و پیام خطا به کاربر نمایش داده شود.
4. استفاده از تابع بکآپگیری
اکنون میتوانیم از تابع `create_backup` برای ایجاد بکآپ از فایلها یا دایرکتوریهای مورد نظر خود استفاده کنیم.
if __name__ == "__main__":
success = create_backup(source_path, backup_path, backup_name, compression_format)
if success:
print("بکآپگیری با موفقیت انجام شد.")
else:
print("بکآپگیری با خطا مواجه شد.")
5. زمانبندی بکآپگیری
برای اینکه بکآپگیری به طور خودکار و منظم انجام شود، میتوانیم از زمانبندی استفاده کنیم. در سیستمعاملهای مختلف، روشهای مختلفی برای زمانبندی وجود دارد. به عنوان مثال، در لینوکس میتوان از `cron` و در ویندوز میتوان از `Task Scheduler` استفاده کرد.
برای استفاده از `cron` در لینوکس، میتوانید یک خط جدید به فایل `crontab` اضافه کنید. به عنوان مثال، برای اجرای اسکریپت هر روز ساعت 2 بامداد، میتوانید خط زیر را به فایل `crontab` اضافه کنید:
0 2 * * * python /path/to/your/backup_script.py
6. بهبود اسکریپت
اسکریپت فوق یک اسکریپت پایه برای بکآپگیری است. میتوان آن را با افزودن ویژگیهای زیر بهبود بخشید:
- پشتیبانی از چندین فرمت فشردهسازی
- امکان تعیین تعداد نسخههای بکآپ نگهداری شده (چرخش بکآپ)
- ارسال ایمیل در صورت موفقیت یا شکست بکآپگیری
- ثبت وقایع بکآپگیری در یک فایل لاگ
- پشتیبانی از بکآپگیری افزایشی (Incremental Backup)
مثال چرخش بکآپ (Backup Rotation)
برای جلوگیری از پر شدن فضای ذخیرهسازی، میتوانیم فقط تعداد محدودی از نسخههای بکآپ را نگهداری کنیم. کد زیر یک مثال ساده از چرخش بکآپ را نشان میدهد:
import os
import glob
def rotate_backups(backup_path, backup_name, compression_format, max_backups):
"""
چرخش بکآپها با حذف نسخههای قدیمیتر.
"""
search_pattern = os.path.join(backup_path, backup_name + ".*" + compression_format)
backups = glob.glob(search_pattern)
backups.sort()
if len(backups) > max_backups:
for backup in backups[:-max_backups]:
try:
os.remove(backup)
print(f"بکآپ قدیمی {backup} حذف شد.")
except Exception as e:
print(f"خطا در حذف بکآپ قدیمی {backup}: {e}")
# مثال استفاده:
max_backups_to_keep = 7
rotate_backups(backup_path, backup_name, compression_format, max_backups_to_keep)
نتیجهگیری
در این مقاله، نحوه ساخت یک اسکریپت بکآپگیری با استفاده از پایتون را آموزش دادیم. این اسکریپت میتواند به طور قابل توجهی خطر از دست رفتن دادهها را کاهش دهد و فرآیند بازیابی را تسهیل کند. با افزودن ویژگیهای بیشتر، میتوان این اسکریپت را به یک ابزار قدرتمند برای مدیریت دادهها تبدیل کرد. به یاد داشته باشید که بکآپگیری منظم و آزمایش بازیابی بکآپها از اهمیت بالایی برخوردار است.

بدون دیدگاه