بسیار مهم (اخطار)
برای استفاده از این bash حتما نیاز هست monitor_converted در پارتیشن مجزایی ماونت شده باشد در غیر این صورت اگر روی پارتیشن روت اعمال کنید به مرور زمان که لاگ ها و بک اپ فضا را اشغال میکنند این bash از ویس ها پاک میکند نسبت به درصد و بعد چند سال مشاهده میکنید که 60 درصد فقط لاگ و بک آپ …. هست.(اصول پارتیشن بندی)
برای سرور ویپ نیاز داشتم در صورتی که فضای هارد در حال پر شدن بود، قبل از اینکه سرویس دچار مشکل شود، سیستم بهصورت خودکار هشدار بدهد و در صورت بحرانی شدن وضعیت، قدیمیترین فایلهای ضبط مکالمه را حذف کند.
به همین خاطر این اسکریپت Bash را نوشتم و شاید برای دوستان دیگر هم مفید باشد.
bash
قابلیتها
-
مانیتورینگ میزان استفاده از فضای دیسک
-
تماس خودکار با یک داخلی در صورت عبور از آستانه مشخص (Warning)
-
پخش فایل صوتی هشدار
-
جلوگیری از ارسال هشدارهای تکراری تا زمانی که وضعیت دیسک عادی نشود
-
حذف خودکار قدیمیترین پوشههای ضبط مکالمه
-
ادامه حذف تا رسیدن به درصد فضای موردنظر
-
ثبت کامل عملیات در فایل Log
-
قابلیت اجرا از طریق Cron
نحوه عملکرد
به عنوان مثال:
-
اگر فضای دیسک به 70٪ برسد:
-
اسکریپت یک تماس با داخلی تعیینشده برقرار میکند.
-
فایل صوتی هشدار را پخش میکند.
-
-
اگر فضای دیسک به 75٪ برسد:
-
حذف قدیمیترین پوشه ضبط مکالمات آغاز میشود.
-
پس از حذف هر پوشه، دوباره فضای دیسک بررسی میشود.
-
این روند تا رسیدن فضای مصرفی به 60٪ ادامه پیدا میکند.
-
ساختار پوشهها
اسکریپت برای ساختاری مانند زیر طراحی شده است:
/var/spool/asterisk/monitor_converted/
├── 20260720/
├── 20260721/
├── 20260722/
├── 20260723/
هر پوشه مربوط به ضبط های یک روز است.
در زمان پاکسازی، کل قدیمیترین پوشه حذف میشود و پوشههای خالی باقی نمیمانند.
تنظیمات قابل تغییر
کافی است مقادیر زیر را داخل اسکریپت تغییر دهید:
PARTITION="/var/spool/asterisk/monitor_converted"
RECORD_PATH="/var/spool/asterisk/monitor_converted"
WARNING_LEVEL=70
DELETE_LEVEL=75
TARGET_LEVEL=60
EXTENSION="202"
SOUND="pr/warningsounds"
اجرای دورهای با Cron
برای اجرای خودکار هر دو ساعت:
0 */2 * * * /usr/local/bin/disk_monitor.sh
لاگ
تمام عملیات در فایل زیر ثبت میشود:
/tmp/disk_monitor.log
شامل:
-
میزان استفاده از هارد
-
زمان ارسال هشدار
-
مسیر پوشه حذفشده
-
نتیجه حذف
-
درصد فضای دیسک بعد از هر عملیات
در صورت استفاده از سیموتل طبق عکس سناریو مورد نظر پیاده سازی کنید و یک کانتکست اختصاص دهید.
سپس کانتکست در کد جایگزین sound-alert
/usr/sbin/asterisk -rx "channel originate Local/${EXTENSION}@sound-alert application Playback ${SOUND}
کنید در این صورت تماس با داخلی برقرار میشود و در کارکتور به شما این قابلیت را میدهد که caller ID عوض کنید برای مثال Disk-Alert
در صورتی که سیموتل ندارید این دایل پلن در استریسک و سرویس ویپ پیاده سازی نمایید.
