كتابة سكربتات أتمتة لمهام النسخ الاحتياطي والصيانة

دقائق القراءة: 5

كتابة سكربتات أتمتة لمهام النسخ الاحتياطي والصيانة

تُعد أتمتة النسخ الاحتياطي والصيانة من أهم الممارسات التي ترفع موثوقية الخوادم وتقلل الأخطاء البشرية، خصوصاً في البيئات التي تعتمد على لينكس لإدارة الخدمات والملفات وقواعد البيانات. بدلاً من تنفيذ الأوامر يدوياً كل يوم، يمكن بناء سكربتات ذكية تتولى إنشاء النسخ الاحتياطية، تنظيف الملفات المؤقتة، تدوير السجلات، والتحقق من سلامة النتائج، مع تسجيل كل خطوة بشكل احترافي.

هذا النوع من السكربتات لا يتعلق فقط بتوفير الوقت، بل بتحسين الاستقرار وإمكانية الاستعادة السريعة عند الطوارئ. وإذا كنت قد قرأت مقدمة إلى Bash Scripting: المتغيرات، الشروط، والحلقات فستجد أن هذا المقال ينقلك إلى مستوى عملي أكثر، حيث نطبق المفاهيم على سيناريوهات تشغيل حقيقية تناسب الخوادم الإنتاجية.

لماذا تحتاج إلى سكربت أتمتة احترافي؟

النسخ الاحتياطي اليدوي قد ينجح مرة أو مرتين، لكنه غير مناسب عند إدارة أنظمة تتغير يومياً. أي نسيان أو خطأ في المسار أو الصلاحيات قد يؤدي إلى فقدان بيانات مهمة أو إنشاء نسخة غير قابلة للاستعادة.

السكربت الاحترافي يضمن تنفيذ المهام بشكل موحد، ويمنحك مزايا إضافية مثل التحقق من الأخطاء، الاحتفاظ بعدد محدد من النسخ القديمة، وإرسال تنبيهات عند الفشل. كما يمكن ربطه مع جدولة المهام التلقائية باستخدام (Cron Jobs) ليعمل دون تدخل بشري.

المكونات الأساسية لسكربت النسخ الاحتياطي والصيانة

1. تحديد المسارات والموارد المهمة

قبل كتابة أي سطر برمجي، يجب تحديد ما الذي ستنسخه احتياطياً: ملفات الموقع، إعدادات الخادم، قواعد البيانات، أو مجلدات المستخدمين. فهم أماكن هذه الملفات يرتبط مباشرة بـ هيكلية ملفات لينكس (Filesystem Hierarchy Standard – FHS) لأن ذلك يساعدك على معرفة ما يجب حفظه وما يمكن استبعاده.

  • ملفات التطبيقات داخل /var/www أو /opt.
  • ملفات الإعدادات داخل /etc.
  • السجلات المهمة داخل /var/log.
  • نسخ قواعد البيانات باستخدام أدوات مثل mysqldump أو pg_dump.

2. ضبط الصلاحيات والتنفيذ الآمن

أغلب مهام النسخ الاحتياطي تتطلب الوصول إلى ملفات حساسة. لذلك يجب أن تفهم جيداً إدارة الصلاحيات والملكية (Chmod, Chown, Sudo) حتى لا تمنح السكربت صلاحيات أوسع من اللازم. القاعدة الأفضل هي تشغيله بمستخدم مخصص أو عبر sudo على أوامر محددة فقط.

لا تحفظ كلمات المرور الحساسة مباشرة داخل السكربتات النصية إن أمكن. استخدم ملفات إعدادات محمية أو متغيرات بيئة بصلاحيات مقيدة.

نموذج عملي لسكربت نسخ احتياطي وصيانة

السكربت التالي ينشئ نسخة مضغوطة من مجلد موقع، ينسخ ملف إعدادات، يحذف النسخ الأقدم من 7 أيام، ثم يسجل النتيجة في ملف سجل. تم تصميمه ليكون واضحاً وقابلاً للتطوير.

#!/bin/bash

set -euo pipefail

BACKUP_DIR="/backup"
SOURCE_DIR="/var/www/html"
CONFIG_DIR="/etc/nginx"
LOG_FILE="/var/log/backup_maintenance.log"
DATE=$(date +%F-%H%M)
ARCHIVE_NAME="site-backup-$DATE.tar.gz"
RETENTION_DAYS=7

mkdir -p "$BACKUP_DIR"

echo "[$(date '+%F %T')] Starting backup job" >> "$LOG_FILE"

if tar -czf "$BACKUP_DIR/$ARCHIVE_NAME" "$SOURCE_DIR" "$CONFIG_DIR"; then
  echo "[$(date '+%F %T')] Backup created: $ARCHIVE_NAME" >> "$LOG_FILE"
else
  echo "[$(date '+%F %T')] Backup failed" >> "$LOG_FILE"
  exit 1
fi

find "$BACKUP_DIR" -type f -name "site-backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "[$(date '+%F %T')] Old backups cleaned" >> "$LOG_FILE"
echo "[$(date '+%F %T')] Job completed successfully" >> "$LOG_FILE"

هذا المثال يعتمد على مبادئ مهمة: الإيقاف عند الخطأ، استخدام متغيرات واضحة، وتسجيل كل مرحلة. كما أنه يوظف أوامر منطقية ستصبح أسهل إذا كنت متمكناً من التعامل مع الملفات والمجلدات (Navigation, CRUD Operations) والبحث المتقدم في النظام باستخدام (find, locate, grep).

إضافة نسخ احتياطي لقواعد البيانات

في التطبيقات الحية، الملفات وحدها لا تكفي. تحتاج أيضاً إلى تصدير قاعدة البيانات قبل أو بعد نسخ الملفات، بحسب بنية النظام. المثال التالي يضيف نسخة MySQL بشكل منفصل ليسهل الاستعادة الجزئية لاحقاً.

#!/bin/bash

DB_NAME="app_db"
DB_USER="backup_user"
DB_PASS="strong_password"
BACKUP_DIR="/backup"
DATE=$(date +%F-%H%M)
DB_FILE="$BACKUP_DIR/db-$DATE.sql"

mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$DB_FILE"
gzip "$DB_FILE"

إذا كنت تدير خادماً بعيداً، فيمكنك بعد إنشاء النسخة نقلها بأمان إلى جهاز آخر عبر النقل الآمن للملفات وإدارة الاتصال عن بُعد (SSH, SCP, SFTP). هذه خطوة ممتازة لتطبيق قاعدة النسخ الاحتياطي المعروفة: الاحتفاظ بنسخ محلية ونسخ خارجية.

مهام الصيانة التي يمكن أتمتتها

الأتمتة لا تتوقف عند النسخ الاحتياطي. هناك مهام صيانة دورية يمكن ضمها إلى نفس السكربت أو فصلها في سكربتات مستقلة حتى يسهل اختبارها ومراقبتها.

جدولة السكربت وتشغيله تلقائياً

بعد اختبار السكربت يدوياً، تأتي خطوة الجدولة. يمكنك إضافته إلى crontab ليعمل يومياً في وقت منخفض الحمل. احرص على استخدام مسارات مطلقة داخل السكربت لأن بيئة Cron محدودة مقارنة بالجلسة التفاعلية.

chmod +x /usr/local/bin/backup.sh
crontab -e

0 2 * * * /usr/local/bin/backup.sh

إن كنت بحاجة إلى تسجيل خرج التنفيذ بالكامل، يمكنك الاستفادة من مفاهيم الأنابيب وإعادة التوجيه (Pipes and Redirections: |, >, >>) لتمرير النتائج إلى ملف سجل مستقل أو إلى أداة تنبيه بريدية.

أفضل الممارسات لرفع الاعتمادية

  1. اختبر السكربت على بيئة تجريبية قبل تشغيله على الخادم الإنتاجي.
  2. تحقق من إمكانية الاستعادة، لأن النسخة الاحتياطية غير المختبرة قد تكون عديمة الفائدة.
  3. استخدم أسماء ملفات تتضمن التاريخ والوقت لتجنب الاستبدال غير المقصود.
  4. فصل مهام النسخ عن مهام التنظيف إذا كان النظام معقداً.
  5. راقب السجلات بانتظام ولا تفترض أن الجدولة وحدها تعني النجاح.

المعيار الحقيقي لنجاح أي خطة نسخ احتياطي ليس إنشاء الملفات فقط، بل القدرة على استعادة الخدمة بسرعة وبدون فقدان بيانات حرجة.

خاتمة

كتابة سكربتات أتمتة لمهام النسخ الاحتياطي والصيانة هي خطوة عملية تنقل إدارة الخوادم من العمل اليدوي المرهق إلى التشغيل المنضبط والقابل للتوسع. باستخدام Bash، وبعض أدوات لينكس الأساسية، يمكنك بناء منظومة موثوقة تنشئ النسخ، تنظف القديم، تراقب النتائج، وتدعم استمرارية الأعمال.

ابدأ بنطاق صغير: مجلد واحد، خدمة واحدة، وسجل واحد. ثم طوّر السكربت تدريجياً بإضافة نسخ قواعد البيانات، النقل الخارجي، والتنبيهات. هذا النهج التدريجي أكثر أماناً، ويؤسس لبيئة تشغيل احترافية يسهل إدارتها على المدى الطويل.

11 comments

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *