اسکریپت Bash برای چک کردن حجم هارد، ارسال پیام صوتی و حذف فایل‌های قدیمی

یک اسکریپت Bash را معرفی می‌کنیم که برای نظارت بر فضای هارد و انجام اقدامات خاص طراحی شده است. این اسکریپت به‌طور خودکار فضای هارد سرور را بررسی می‌کند و اگر بیش از 85% از هارد پر شده باشد، پیام صوتی از طریق مرکز تماس به یک داخلی خاص از پیش تعریف شده ارسال می‌کند. سپس اگر فضای هارد بیشتر از 90% باشد، فایل‌های قدیمی از مسیرهای مشخص حذف می‌شوند تا مرکزتماس به علت پرشدن حجم هارد دیسک قطع نشود.

مشخصات اسکریپت:

  1. چک کردن حجم هارد: این اسکریپت به‌طور خودکار حجم استفاده شده از هارد را بررسی می‌کند.
  2. ارسال پیام صوتی به یک داخلی خاص جهت اعلان: اگر استفاده از هارد بیشتر از 85% باشد، دو بار پیغام صوتی از طریق مرکزتماس به یک داخلی خاص از پیش تعریف شده ارسال می‌شود.
  3. حذف فایل‌های قدیمی: اگر فضای دیسک بیشتر از 90% باشد، فایل‌های قدیمی یک ماه گذشته در مسیرهای مشخص شده حذف می‌شوند.

مسیرهای مشخص شده جهت حذف کردن لاگ های قدیمی:

1.حذف لاگ های دیتابیس در مسیر /var/log/mongodb/ که بیشتر از 30 روز از ایجاد آن میگذرد.
2.حذف بکاپ های روزانه و هفتگی که بیشتر از 30 روز از ایجاد آن گذشته است.

مراحل پیاده‌سازی اسکریپت:

** اسکریپت Bash (check_disk_usage.sh)**

اسکریپت زیر را ایجاد کنید:

  • ما در مسیر /usr/local/bin/ فایل را ایجاد کرده ایم.
#!/bin/bash

DISK_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

ASTERISK_EXTENSION="722" 
VOICE_FILE="/var/lib/asterisk/sounds/check_disk/sound.wav" 

if [ "$DISK_USAGE" -gt 85 ]; then

    sudo asterisk -rx "channel originate SIP/$ASTERISK_EXTENSION extension 1234@main_routing" < $VOICE_FILE
    echo "پیام صوتی اول ارسال شد. یک ساعت منتظر می‌مانیم..."

    sleep 3600  

    sudo asterisk -rx "channel originate SIP/$ASTERISK_EXTENSION extension 1234@main_routing" < $VOICE_FILE
    echo "پیام صوتی دوم ارسال شد."

    
    DISK_USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

    
    if [ "$DISK_USAGE" -gt 90 ]; then
        echo "فضای دیسک بیشتر از 90% است. حذف فایل‌های قدیمی..."

       
        find /var/spool/simotel/backup/weekly/ -type f -mtime +30 -exec rm -f {} \;

       
        find /var/spool/simotel/backup/daily/ -type f -mtime +30 -exec rm -f {} \;

        find /var/log/mongodb/ -type f -name "mongo.log.20*" -mtime +30 -exec rm -f {} \;

        echo "فایل‌های قدیمی حذف شدند."
    else
        echo "فضای دیسک کمتر از 90% است. هیچ فایلی حذف نشد."
    fi
fi

موزیک یا فایلی که در 2 تماس اولیه از سیستم برقرار میشود و پخش خواهد شد را باید در مسیر زیر بگذارید (موزیک دیفالت را از اینجا میتوانید دانلود نمایید):

/var/lib/asterisk/sounds/check_disk/sound.wav

تنظیمات کرون برای اجرای اسکریپت:

برای اجرای اسکریپت به‌طور خودکار هر روز در ساعت‌های مشخص (مثلاً ساعت 12 ظهر و 1 بعدازظهر)، دستور کرون زیر را به فایل کرون‌تب اضافه کنید:

  1. ویرایش فایل کرون‌تب:
crontab -e
  1. اضافه کردن خطوط زیر برای اجرای اسکریپت در ساعت‌های 12:00 و 13:00:
0 12 * * * /bin/bash /usr/local/bin/check_disk_usage.sh
0 13 * * * /bin/bash /usr/local/bin/check_disk_usage.sh

مجوزهای اسکریپت:

chmod +x /usr/local/bin/check_disk_usage.sh

توضیحات:

ایجاد سناریوی تماس پیغام صوتی که به داخلی قرار هست ارسال شود را در سیموتل به شرح زیر ایجاد میکنیم و context را هم در کد و هم در سناریو main_routing تنظیم کرده ایم و تماس با pattern 1234 وارد موزیک میگردد و فایل موزیک را میتوانید از اینجا نیز دانلود و در سناریو تنظیم نمایید:

همچنین در اسکریپت، در خط زیر داخلی که میخواهید زنگ بخورد را تنظیم بفرمایید:

ASTERISK_EXTENSION="722"

بررسی و اجرای دستی اسکریپت

برای بررسی اینکه اسکریپت به درستی کار می‌کند، می‌توانید آن را به صورت دستی اجرا کنید:

/bin/bash /usr/local/bin/check_disk_usage.sh

درصورت داشتن هرگونه سوال جهت بررسی، سوالات خود را میتوانید در همین پست فاروم مطرح بفرمایید.

3 پسندیده