| کانال گنو/لینوکس |
2.82K subscribers
28 photos
2 videos
2 files
44 links
⭕️ کانال گنو/لینوکس دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
گاهی وسط کار یادت می‌افته که از پوشه‌ی پروژه‌هات Backup نگرفتی و استرس Crash یا خراب شدن Disk میاد سراغت. روی گنو/لینوکس خیلی راحت می‌شه با یه Bash Script ساده و ابزارهای استاندارد مثل cron این کار رو اتومات کرد.

ایده اینه 👇

هر شب مثلاً ساعت ۲ بامداد، از یک پوشه (مثلاً /home/user/projects) یه Archive فشرده گرفته بشه و توی یه مسیر امن ذخیره بشه. اگر هم خواستی بعداً می‌تونی اون رو روی یک Remote Server با scp یا rsync بفرستی.

مبنای کار هم چیزیه که توی مستندات رسمی Bash و manpageهای tar و cron هست (مثلاً man tar و man 5 crontab).

این یه Script خیلی ساده و در عین حال کاربردی برای Backup روزانه است:

#!/usr/bin/env bash

set -euo pipefail

SOURCE_DIR="/home/user/projects"
BACKUP_DIR="/home/user/backups"

mkdir -p "${BACKUP_DIR}"

DATE="$(date +%F_%H-%M-%S)"
ARCHIVE_NAME="projects_${DATE}.tar.gz"

/usr/bin/tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" "${SOURCE_DIR}"

echo "Backup created at ${BACKUP_DIR}/${ARCHIVE_NAME}"


چند نکته‌ی ریز ولی مهم 👇

• از set -euo pipefail استفاده شده تا Script روی خطاها Stop کنه و اشتباهات Silent نمونه.

• از date برای گذاشتن Timestamp روی اسم فایل استفاده می‌کنیم تا هر Backup فایل جدا داشته باشه و قبلی‌ها Overwrite نشن.

• مسیر کامل /usr/bin/tar توی Script استفاده شده، چون وقتی با cron اجرا می‌شه، PATH معمولاً خیلی محدودتر از Shell عادیه.

حالا برای اتومات کردن با cron:

۱️⃣ فایل رو مثلاً با اسم backup_projects.sh ذخیره کن و اجرایی‌اش کن:
chmod +x ~/backup_projects.sh


۲️⃣ cron کاربر رو ویرایش کن:
crontab -e


۳️⃣ این خط رو اضافه کن تا هر روز ساعت ۲ صبح اجرا بشه:
0 2 * * * /home/user/backup_projects.sh >> /home/user/backup.log 2>&1


Log رو هم توی backup.log نگه می‌داریم که اگر جایی مشکل شد، با یک tail -f backup.log راحت ببینی چی شده.

برای جزئیات بیشتر حتماً یه نگاه به مستندات رسمی بنداز:
GNU Bash Manual
crontab(5) man page

این مدل Scriptهای کوچیک واقعاً توی کار روزمره‌ی Sysadminها و Devها نجات‌بخشه؛ از پروژه‌های شخصی گرفته تا Serverهای جدی. همین امروز روی یه پوشه‌ی آزمایشی امتحانش کن و بعد آروم‌آروم Backupت رو حرفه‌ای‌تر کن 😉

🔖 #Linux #لینوکس #GNU/Linux #bash #backup #cron #shell_scripting #sysadmin

👤 Developix

💎 Channel: @DevelopixLinux
6👍2👎1
تو این پست می‌ریم سراغ یه کار کاملاً عملی که هر ادمین لینوکسی sooner or later بهش نیاز داره: یه اسکریپت Backup ساده با Bash و زمان‌بندی با cron.

سناریو رو اینطوری فرض کن 👇
یه سرور داری که توی مسیر /var/www پروژه‌هات هست و می‌خوای هر شب یه Backup فشرده ازش گرفته بشه و بره توی یه پوشه‌ی جدا، بدون این‌که یادت بمونه هر شب دستی این کارو انجام بدی.

ایده‌ی کلی:

• استفاده از tar برای ساخت فایل آرشیو فشرده
• نام‌گذاری Backup براساس تاریخ (برای ردیابی راحت)
• زمان‌بندی با cron که خودش اتوماتیک اجراش کنه

مستندات رسمی که این ایده روش‌هاش رو پوشش می‌ده:
GNU tar Manual
GNU Bash Reference Manual
man crontab(5)

حالا بریم سراغ یه نمونه‌ی واقعی 👇

#!/usr/bin/env bash

SRC_DIR="/var/www"
BACKUP_DIR="/backup/www"
DATE="$(date +"%Y-%m-%d_%H-%M")"
ARCHIVE_NAME="www-backup-${DATE}.tar.gz"

mkdir -p "${BACKUP_DIR}"

tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" "${SRC_DIR}"

find "${BACKUP_DIR}" -type f -name "www-backup-*.tar.gz" -mtime +7 -delete


این اسکریپت:

• از SRC_DIR یه آرشیو .tar.gz می‌سازه
• توی BACKUP_DIR ذخیره‌اش می‌کنه
• Backupهای قدیمی‌تر از ۷ روز رو پاک می‌کنه تا دیسک پر نشه

یه نکته‌ی ریز: اگر مسیرها رو عوض می‌کنی، حواست باشه یوزری که اسکریپت رو اجرا می‌کنه، permission لازم برای خوندن SRC_DIR و نوشتن تو BACKUP_DIR رو داشته باشه.

حالا برای زمان‌بندی با cron (مثلاً هر روز ساعت ۳ صبح):

۱) اسکریپت رو مثلاً بذار تو /usr/local/bin/www-backup.sh و اجراپذیرش کن:
chmod +x /usr/local/bin/www-backup.sh


۲) crontab رو برای یوزر root باز کن:
crontab -e


۳) این خط رو اضافه کن:
0 3 * * * /usr/local/bin/www-backup.sh >/var/log/www-backup.log 2>&1


با این کار هر شب ساعت ۳ صبح، Backup گرفته می‌شه و خروجی هم توی لاگ ذخیره می‌شه تا بعداً اگر مشکلی شد، دیباگش راحت باشه.

برای شروع همین اسکریپت ساده فوق‌العاده کاربردیه؛ بعداً می‌تونی encrypt، انتقال روی remote (مثلاً با rsync+ssh) یا Notification هم بهش اضافه کنی.

امتحانش کن روی یه پوشه‌ی تستی و اگر مفید بود برای بقیه‌ی لینوکسی‌ها هم بفرست 🌱

🔖 #Linux #لینوکس #Linux #GNU #Bash #Backup #cron #Shell_Scripting #Sysadmin

👤 Developix

💎 Channel: @DevelopixLinux
👍41
یکی از واقعی‌ترین کارهای روزمره روی سرورهای لینوکسی: بکاپ گرفتن منظم از فایل‌های مهم 📦

اینجا یک سناریوی ساده ولی کاملاً کاربردی:

فرض کن روی سرور، دایرکتوری /var/www داری (مثل سایت‌ها یا اپ‌های وب) و می‌خوای هر روز یک آرشیو فشرده ازش در /backup ذخیره شود، با تاریخ روی اسم فایل، بدون دخالت دست ⏱️

ایده کلی:

• یک اسکریپت Bash می‌نویسیم که:
– دایرکتوری مقصد بکاپ را اگر نبود بسازد
– از دایرکتوری سورس، یک فایل .tar.gz با تاریخ روز درست کند
– لاگ ساده بنویسد
• بعد با cron تنظیمش می‌کنیم که هر شب اجرا شود.

این کار کاملاً مطابق مستندات رسمی است:

GNU tar manual
GNU Bash manual
• راهنمای crontab(5) با اجرای man 5 crontab

نمونه اسکریپت ساده و عملی 👇

#!/usr/bin/env bash

set -euo pipefail

SOURCE_DIR="/var/www"
BACKUP_DIR="/backup"
DATE="$(date +"%Y-%m-%d_%H-%M")"
ARCHIVE_NAME="www-backup-${DATE}.tar.gz"
LOG_FILE="${BACKUP_DIR}/backup.log"

mkdir -p "${BACKUP_DIR}"

tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" "${SOURCE_DIR}" 2>&1 | \
tee -a "${LOG_FILE}"

echo "[${DATE}] Backup created: ${ARCHIVE_NAME}" >> "${LOG_FILE}"


نکات مهم 💡

• حتماً روی سرور به‌جای مسیرهای تستی، مسیر واقعی پروژه‌ات را بگذار.
• یوزری که اسکریپت را اجرا می‌کند باید دسترسی خواندن روی /var/www و نوشتن روی /backup داشته باشد.
• گزینه‌های set -euo pipefail کمک می‌کند اسکریپت اگر به خطا خورد، بی‌سروصدا ادامه ندهد؛ این عادت خیلی خوبی در اسکریپت‌نویسی است.

اتومات کردن با cron 🕒

بعد از ذخیره اسکریپت مثلاً در /usr/local/bin/auto-backup.sh و اجرای:

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


داخل ویرایشگر cron این خط را اضافه کن تا هر روز ۳ بامداد بکاپ بگیرد:

0 3 * * * /usr/local/bin/auto-backup.sh >/dev/null 2>&1


برای تست، یک‌بار دستی اجرا کن تا مطمئن شوی همه چیز درست است و حجم فایل‌های بکاپ بی‌جهت بزرگ نمی‌شود. اگر حجم خیلی بالا بود، می‌شود الگوی حذف بکاپ‌های قدیمی (مثلاً قدیمی‌تر از ۷ روز) را هم به همین اسکریپت اضافه کرد.

چنین اسکریپت‌های کوچک واقعاً توی کار روزمره sysadmin بودن معجزه می‌کنند؛ همین امروز روی یک دایرکتوری تست اجرا کن و نتیجه را ببین 🚀

🔖 #Linux #لینوکس #Linux #Bash #Backup #cron #sysadmin #shell_scripting

👤 Developix

💎 Channel: @DevelopixLinux
👍81🔥1
خیلی وقت‌ها روی سرور یا سیستم شخصی، چند تا فولدر مهم داریم (مثلاً ~/projects یا تنظیمات dotfiles) و همیشه می‌گیم «بعداً براش Backup می‌گیرم» و بعد… دیر می‌شه 🙂

امروز یه سناریوی کاملاً واقعی رو می‌گیریم: ساختن یک Backup روزانه از یه دایرکتوری مهم روی GNU/Linux با استفاده از Bash و ابزارهای استاندارد مثل tar و cron.
این دقیقاً همون چیزیه که توی GNU tar manual و راهنمای crontab(5) توضیح داده شده، فقط اینجا جمع‌وجور و عملی‌ترش می‌کنیم 😎

ایدهٔ اصلی چیه؟

۱️⃣ با tar از یک دایرکتوری، آرشیو فشرده می‌گیریم.

۲️⃣ اسم فایل Backup رو طوری می‌ذاریم که تاریخ توش باشه (برای نسخه‌های مختلف).

۳️⃣ با cron کاری می‌کنیم هر روز خودش اجرا بشه، بدون دخالت دست.

یک اسکریپت Bash ساده:

#!/usr/bin/env bash

SOURCE_DIR="$HOME/projects"
BACKUP_DIR="$HOME/backups"
DATE=$(date +"%Y-%m-%d_%H-%M")

mkdir -p "$BACKUP_DIR"

ARCHIVE_NAME="projects_backup_${DATE}.tar.gz"

# ایجاد آرشیو فشرده با tar
/usr/bin/tar -czf "${BACKUP_DIR}/${ARCHIVE_NAME}" -C "$HOME" projects

# حذف Backupهای قدیمی‌تر از ۳۰ روز
/usr/bin/find "$BACKUP_DIR" -type f -name 'projects_backup_*.tar.gz' -mtime +30 -delete


این اسکریپت:

• فولدر ‎$HOME/projects‎ رو توی ‎$HOME/backups‎ به صورت .tar.gz ذخیره می‌کنه.

• توی اسم فایل تاریخ و ساعت می‌ذاره تا نسخه‌ها قاطی نشن.

• Backupهای قدیمی‌تر از ۳۰ روز رو حذف می‌کنه که هارد پر نشه.

مسیرهای مطلق برای /usr/bin/tar و /usr/bin/find از توصیه‌های مرسوم sysadminهاست، مخصوصاً وقتی اسکریپت قراره از داخل cron اجرا بشه؛ چون PATH همیشه مثل محیط interactive نیست.

خودکار کردن با cron

طبق man crontab، می‌تونیم این اسکریپت رو هر روز ساعت ۳ صبح اجرا کنیم. بعد از این‌که اسکریپت رو مثلاً به اسم backup-projects.sh ذخیره و executable کردیم:

chmod +x $HOME/bin/backup-projects.sh
crontab -e


و این خط رو به crontab اضافه می‌کنیم:

0 3 * * * /home/USERNAME/bin/backup-projects.sh > /home/USERNAME/backup.log 2>&1


فقط USERNAME رو با یوزر خودت عوض کن. خروجی هم توی backup.log ذخیره می‌شه که اگر مشکلی پیش اومد، راحت لاگ رو چک کنی.

یه نکتهٔ مهم: حتماً یک بار دستی اسکریپت رو اجرا کن و آرشیو رو باز کن تا مطمئن بشی دقیقاً همون چیزی رو که می‌خوای Backup می‌گیری.

این مدل Backup ساده، برای لپ‌تاپ شخصی، سرور توسعه، یا حتی Raspberry Pi عالی جواب می‌ده. نه ابزار پیچیده لازم داره، نه تنظیمات عجیب و غریب.

امتحانش کن، کمی برای نیاز خودت شخصی‌سازیش کن، و اگر به‌دردت خورد برای بقیهٔ لینوکسی‌ها هم بفرست 🌱

🔖 #Linux #لینوکس #GNU/Linux #Bash #Backup #cron #tar #Shell_Scripting #Sysadmin

👤 Developix

💎 Channel: @DevelopixLinux
5🔥1