ثبت سفارش آنلاین به‌زودی فعال می‌شود. تا آن موقع برای سفارش با ما تماس بگیرید.Online ordering is coming soon. Until then, please contact us to order.تماس با ماContact us
JolfaCLOUD

مرکز آموزش / شبکه و میکروتیک

اسکریپت و خودکارسازی در میکروتیک: Scheduler، Netwatch و هشدار در بله و تلگرام

مبانی زبان اسکریپت RouterOS، اجرای زمان‌بندی‌شده، هشدار خودکار وقتی اینترنت یا یک سرور قطع شد، ارسال پیام به ربات بله یا تلگرام با fetch، و چند اسکریپت آماده و امن.

۱۰ دقیقه مطالعه · به‌روزرسانی آبان ۱۴۰۵

This guide is available in Persian for now. Switch to FA to read it.

روتری که خودش خبر بدهد «لینک اول قطع شد» یا «سرور حسابداری جواب نمی‌دهد»، یعنی شما قبل از تلفن کارمندها از مشکل باخبرید. RouterOS یک زبان اسکریپت داخلی دارد و دو ابزار برای اجرای خودکار آن: Scheduler (بر اساس زمان) و Netwatch (بر اساس وضعیت یک آدرس).

مبانی زبان اسکریپت

RouterOS
:local name [/system/identity/get name]
:local up [/system/resource/get uptime]
:local cpu [/system/resource/get cpu-load]
:if ($cpu > 80) do={
    :log warning ("CPU high on " . $name . ": " . $cpu . "%")
}
:foreach r in=[/ip/route/find where dst-address="0.0.0.0/0"] do={
    :put [/ip/route/get $r gateway]
}
  • :local متغیر می‌سازد و $name مقدارش را می‌خواند.
  • براکت [ ] خروجی یک دستور را برمی‌گرداند؛ find و get پرکاربردترین‌اند.
  • . رشته‌ها را به هم می‌چسباند و :log در لاگ سیستم می‌نویسد.

اسکریپت را کجا نگه داریم؟

اسکریپت را در /system/script با یک اسم ذخیره کنید و از Scheduler یا Netwatch فقط صدایش بزنید. این‌طوری یک جا تغییرش می‌دهید و همه‌جا اعمال می‌شود. برای هر اسکریپت فقط دسترسی‌هایی (policy) را بدهید که لازم دارد.

فرستادن پیام به بله یا تلگرام

هر دو پیام‌رسان API ربات مشابهی دارند: یک ربات بسازید (در بله از BotFather بله و در تلگرام از BotFather تلگرام)، توکن را بگیرید، به ربات پیام بدهید و chat_id خودتان را پیدا کنید. بعد یک اسکریپت عمومی برای فرستادن پیام:

RouterOS
/system/script/add name=notify policy=read,test source={
    :global msg
    :local token "BOT-TOKEN"
    :local chat "CHAT-ID"
    :local url ("https://tapi.bale.ai/bot" . $token . "/sendMessage")
    /tool/fetch url=$url http-method=post output=none \
        http-header-field="Content-Type: application/json" \
        http-data=("{\"chat_id\":\"" . $chat . "\",\"text\":\"" . $msg . "\"}")
}

برای تلگرام، آدرس را https://api.telegram.org/bot بگذارید. در ایران دسترسی روتر به سرور تلگرام ممکن نیست ولی API بله داخلی است و مستقیم کار می‌کند؛ برای هشدار شبکه، بله گزینهٔ قابل اعتمادتری است چون باید در همان وقتی کار کند که اینترنت بین‌الملل مشکل دارد.

Netwatch: هشدار قطع و وصل

RouterOS
/tool/netwatch/add host=1.1.1.1 type=icmp interval=30s timeout=2s \
    down-script=":global msg \"[office-gw] internet ISP1 DOWN\"; /system/script/run notify" \
    up-script=":global msg \"[office-gw] internet ISP1 back UP\"; /system/script/run notify"
/tool/netwatch/add host=192.168.10.20 type=icmp interval=1m \
    down-script=":global msg \"[office-gw] accounting server DOWN\"; /system/script/run notify"

اگر آدرس 1.1.1.1 را مثل مقالهٔ failover از مسیر لینک اول روت کرده‌اید، این هشدار دقیقاً قطعی همان لینک را خبر می‌دهد. نکته: وقتی اینترنت قطع است، پیام از لینک دوم می‌رود؛ اگر لینک دوم ندارید، پیام قطعی را بعد از وصل شدن دریافت می‌کنید، پس پیام «UP» را هم بفرستید تا مدت قطعی معلوم شود.

Scheduler: کارهای زمان‌بندی‌شده

گزارش روزانهٔ وضعیت روتر، هر روز ساعت ۹ صبح:

RouterOS
/system/script/add name=daily-report policy=read,test source={
    :global msg
    :local id [/system/identity/get name]
    :local ver [/system/resource/get version]
    :local up [/system/resource/get uptime]
    :local mem ([/system/resource/get free-memory] / 1048576)
    :set msg ("[" . $id . "] RouterOS " . $ver . " | uptime " . $up . " | free RAM " . $mem . " MB")
    /system/script/run notify
}
/system/scheduler/add name=daily-report start-time=09:00:00 interval=1d on-event=daily-report

چند ایدهٔ آماده

  • هشدار ورود: اسکریپتی که هر ۵ دقیقه لاگ را برای login failure می‌گردد و اگر زیاد بود خبر می‌دهد.
  • هشدار آپدیت: هفته‌ای یک بار /system/package/update/check-for-updates و اگر نسخهٔ تازه آمد، پیام بدهد. خود آپدیت را خودکار نکنید؛ آپدیت امن نظارت لازم دارد.
  • بکاپ شبانه که در مقالهٔ بکاپ ساختیم.

عیب‌یابی اسکریپت

  • اسکریپت را دستی اجرا کنید: /system/script/run notify و /log/print where topics~"script" را ببینید.
  • در /system/script/print ستون run-count نشان می‌دهد اصلاً اجرا شده یا نه.
  • اگر fetch خطای گواهی داد، ساعت روتر را چک کنید؛ ساعت غلط رایج‌ترین دلیل خطای HTTPS است.
برای سرویس‌هایتان هاست پایدار لازم دارید؟دیدن پلن‌های هاست

منابع

  1. MikroTik Manual — Scripting help.mikrotik.com/docs/display/ROS/Scripting
  2. MikroTik Manual — Scheduler manual.mikrotik.com/docs/system-information-and-utilities/scheduler
  3. MikroTik Manual — Netwatch help.mikrotik.com/docs/display/ROS/Netwatch
  4. Telegram Bot API core.telegram.org/bots/api