ترکیب همهی آموختهها در یک اسکریپت واقعی
در این درس پایانی، همهی مفاهیم این فصل را در یک اسکریپت واقعی برای گرفتن نسخهی پشتیبان از یک پایگاهداده ترکیب میکنیم:
#!/bin/bash
BACKUP_DIR="/home/ali/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="backup_${DATE}.sql"
if [ ! -d "$BACKUP_DIR" ]; then
echo "پوشهی بکاپ وجود ندارد؛ در حال ساخت..."
mkdir -p "$BACKUP_DIR"
fi
echo "در حال گرفتن نسخهی پشتیبان از پایگاهداده..."
pg_dump mydb > "$BACKUP_DIR/$FILENAME"
if [ $? -eq 0 ]; then
echo "بکاپ با موفقیت در $BACKUP_DIR/$FILENAME ذخیره شد"
else
echo "خطا در گرفتن بکاپ!"
exit 1
fi
echo "در حال حذف بکاپهای قدیمیتر از ۷ روز..."
find "$BACKUP_DIR" -name "backup_*.sql" -mtime +7 -delete
echo "پایان عملیات بکاپگیری"
در این اسکریپت، متغیر ویژهی $? بلافاصله بعد از یک دستور، کد خروجی آن دستور را نشان میدهد؛ مقدار صفر یعنی موفقیت و هر عدد غیرصفر یعنی خطا. با بررسی این مقدار، اسکریپت میتواند تصمیم بگیرد که آیا ادامه دهد یا با پیام خطا متوقف شود. $(date ...) نیز خروجی یک دستور دیگر را در متغیر میریزد. دستور find با فلگ -mtime +7 فایلهای قدیمیتر از هفت روز را پیدا و با -delete حذف میکند. در اسکریپتهای واقعیتر، معمولاً از set -e در ابتدای فایل نیز استفاده میشود تا با اولین خطای غیرمنتظره، کل اسکریپت بلافاصله متوقف شود.
گام بعدی
چنین اسکریپتی را میتوان با cron (زمانبند خودکار لینوکس) هر شب بهصورت خودکار اجرا کرد تا بکاپگیری کاملاً بدون دخالت انسانی انجام شود. با تمام آنچه در این دوره آموختید، اکنون پایهی محکمی برای ادامهی مسیر به سمت دورههای داکر و دواپس دارید.