اسکریپت نویسی در میکروتیک (بخش دوم) - آشنایی با ابزار Scheduler و شرط
توسط
- 2014-02-20 - 12:44 AM (بازدید: 9119)
|
در بخش قبل با مقدمات و راه های مختلف اجرای اسکریپت در میکروتیک آشنا شدیم.
در این بخش قصد داریم یک اسکریپت ایجاد کنیم که توسط ابزار scheduler هر یک دقیقه یکبار بطور اتوماتیک اجرا شود.
عملکرد این اسکریپت به این صورت است که بین دو سرور مختلف dns چک شود که کدام سرور packet-loss کمتری دارد و بعنوان سرور dns روتر انتخاب شود.
هدف از این تمرین آشنایی بیشتر با ساختار اسکریپت و همچنین استفاده از شرط (if else) می باشد. (این اسکریپت بهترین راه انتخاب سرور dns نیست هدف تمرین و یادگیری است)
فرض می کنیم دو dns server مد نظر ماست:
- سرور 4.2.2.4
- سرور 8.8.8.8
اولین گام ایجاد اسکریپت است. برای این منظور وارد system > scripts می شویم. اسکریپت جدید با نام s1 و source زیر ایجاد می کنیم.یا از طریق دستور زیرکد::global ping1 [/ping 4.2.2.4 count=5]; :global ping2 [/ping 8.8.8.8 count=5]; :if ($ping1>$ping2) do={[/ip dns set servers=4.2.2.4]} else={[/ip dns set servers=8.8.8.8]};
نکته: در دستور فوق برای اینکه کاراکتر $ را بعنوان string وارد source کنیم و نه مقدارش را، از کاراکتر \ قبل $ استفاده می کنیم.کد:system scripts add name=s1 source=":global ping1 [/ping 4.2.2.4 count=5]; :global ping2 [/ping 8.8.8.8 count=5]; :if (\$ping1>\$ping2) do={[/ip dns set servers=4.2.2.4]} else={[/ip dns set servers=8.8.8.8]};"
توضیح اسکریپت:
کد::global ping1 [/ping 4.2.2.4 count=5];
در قسمت قبل با متغیر محلی local: آشنا شدیم، برای تعریف متغیر عمومی از global: استفاده می کنیم.
متغیر با نام ping1 تعریف می کنیم. مقادیر حاصل از اجرای دستور داخل [] بعنوان مقدار متغیر ping1 می باشد.
مقدار حاصل از دستور ping 4.2.2.4 count=5 برابر است با تعداد ping های موفق از 5 دستور ping ارسال شده به سمت 4.2.2.4.
بعنوان مثال اگر از 5 دستور ping ارسال شده به 4.2.2.4 تعداد دو timeout داشته باشیم، متغیر ping1 مقدار 3 می گیرد.
کد::global ping2 [/ping 8.8.8.8 count=5];
خط دوم برنامه مشابه خط اول است با این تفاوت که متغیر ping2 برای 8.8.8.8 ایجاد می شود.
کد::if ($ping1>$ping2) do={[/ip dns set servers=4.2.2.4]} else={[/ip dns set servers=8.8.8.8]};
قسمت اصلی اسکریپت دو متغیر قبل را با هم مقایسه می کند و هر کدام که packet-loss کمتری داشت، بعنوان dns server انتخاب می شود.
برای اجرای اسکریپت می توانیم از دستور زیر استفاده کنیم:
تا اینجا توانستیم گام اول یعنی ایجاد اسکریپت انجام دهیم. بعد از اجرای اسکریپت می توانید متغیر های تولید شده همراه با مقادیرشان را از قسمت system > scripts > environment مشاهده کنید.کد:system scripts run s1
پس ساختار کلی شرط
در اسکریپت میکروتیک به شکل زیر است:
حال که اسکریپت بدون اشکال ایجاد شد،کد::if (شرط) do={عملیاتی که در صورت درست بودن شرط باید انجام شود} else={عملیاتی که در صورت نادرست بودن شرط باید انجام شود}
دومین گام زمانبند کردن اسکریپت است.
برای این منظور می توانیم از قسمت system > scheduler یک زمانبند جدید با نام دلخواه ایجاد کنیم، برای مشخص کردن فاصله زمانی بین دو اجرای اسکریپت از interval استفاده می کنیم و در نهایت در قسمت on event نام اسکریپتی که ایجاد کردیم را وارد می کنیم یعنی s1.
توسط دستور زیر هم می توانیم scheduler را ایجاد کنیم:
پس از ایجاد scheduler هر 60 ثانیه یکبار اسکریپت s1 فوق اجرا می شود. و بعد از چند ثانیه dns server تغییر می کند.کد:system scheduler add name=sch-dns interval=60s on-event=s1
در بخش بعد با حلقه (loop) در اسکریپت و استفاده از ابزار netwatch آشنا می شویم.
موفق باشید