Mikrotik проверка скрипта на ошибки

The page you got that script from is all messed up with /n and /r and linebreaks… all those things should not be in there, and they are showing up because that other page is formatted very badly.

Remove all of the /n /r and line breaks that don’t belong.

Many thanks for you reply, as you tell from my questions my present knowledge of scripting is limited (?)- if i remove the r and n, will this cause the script not to run?

I tried this script (from http://www.mikrotik-routeros.com/?p=24)

I am testing this script correctly in terminal? — In bold is the section i am getting syntax error’s the start and beyond this section appears to be OK?

#Test
/system scheduler
add comment=»» disabled=no interval=1h name=Overseer on-event=»/system script run overseer» policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive start-date=jan/01/1970 start-time=00:30:00
/system script
add name=overseer policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=»:global foundr
n:global mailserverr
n:global adminaddressr
n:global fromaddressr
n:local isfqdnr
nr
n##################r
n# User editable Variables #r
n##################r
nr
n# Set all mail variables each time script is run — you should update these details from this script onlyr
n# Note you can use a dns name for the mailserver however if for any reason this name does not resolve the script will terminate. This is a known bug in 3.X and 4.Xr
nr
n:set mailserver «mail.domain.tld»r
nr
n# Is the value above a valid domain name (no if IP address)r
n:set isfqdn «yes»r
nr
n:set adminaddress «example@domain.tld<script type=text/javascript»
(/* <![CDATA[ */ (function(){try{var s,a,i,j,r,c,l=document.getElementById(__cf_email__);a=l.className;if(a){s=»;r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})(); /* ]]> */ </script>»r
nr
n:set fromaddress «example@domain.tld<script type=text/javascript»r
nr
(n/* <![CDATA[ */ (function(){try{var s,a,i,j,r,c,l=document.getElementById(«__cf_email__»);a=l.className;if(a){s=»;r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})(); /* ]]> */ </script>»r
nr
n######################r
n# End of user editible variables #r
n######################r
nr
n:if ([$isfqdn] = «yes») do={:set mailserver [:resolve $mailserver]}r
nr

n/system script run monthendr
nr
n:if ([$found] = «true») do={/system script run monthlyreport; :log info «—Completed Monthly Report—«} else={ /system script run usagereport; :log info «—Completed Usage Report—«}»

add name=monthend policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=»:local dater
n:local timer
n:local dayr
n:local monthr
n:local yearr
n:local hourr
n:global found «»r
nr
n:set date [/system clock get date]r
n:set time [/system clock get time]r
n:set day [:pick $date 4 6]r
n:set hour [:pick $time 0 2]r
nr
n:if ([$day] = «01» ) do={ :if ([$hour] = «00» ) do={:set found «true» } else={ :set found «false» } } else={ :set found «false» }»
add name=usagereport policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=»:global mailserverr
n:global adminaddressr
n:global fromaddressr
n:local contentr
n:local ir
n:local sitenamer
n:local gigsr
n:local emailr
n:local megstotalr
n:local totalcurrentr
n:local bytesdowncurrentr
n:local bytesupcurrentr
n:local megsdowncurrentr
n:local megsupcurrentr
n:local percentager
n:local lastwarningr
n:local warninglevelr
n:local warnr
n:local updater
n:local newwarningr
n:local bytesdownsavedr
n:local bytestotalr
nr
n#Script based on Automated billing script at http://wiki.mikrotik.com/wiki/AutomatedBillingr
n#Details:r
n#This script checks all current simple queues and using values stored in the queue comment will allow you keep track of usage by each siter
n#The details stored in the queue are broken down and used to determine when a user should be sent a usage warning at 50 75 90 and 100%r
n#You can create/modify a new entry as long as you follow this formatr
n#1) If you just want to name an entry you may do so like «XYZ Router» in the queue namer
n#2) If you want to determine a data limit, enter it like «sitename!gigabytelimit#emailaddress!00#0000» into the comment.r
n#3) If you just want to enter a comment on its own, you can do this so long as you don’t have an «!» in the fieldr
n#Breaking it down: sitename is a descriptive name, gigabyte limit is the monthy limit, email address is the address you want notified r
n#00 is the last percentage warning level for this user, 0000 is the default value for a new data storer
n#This version created by Andrew Cox — http://www.accessplus.com.aur
n#v1.4 Updated 15/June/2009r
n:log info «—— Begining Daily Usage Reports ——-«r
nr
n#For each queue in the listr
n:foreach i in=[/queue simple find comment !=»»] do={r
nr
n#Pull comment out of queue and divide up accordinglyr
n:set content [/queue simple get $i comment]r
nr
n#Determine variables from commentr
n#Format is: sitename ! gigsallowed # who-to-email ! last warning level(0-50-75-90-99)r
n:if ([:find $content «!»] != «») do={r
n :local pos1 [:find $content «!»]r
n :local pos4 [:len $content]r
n :local pos2 ([:find [:pick $content ($pos1+1) $pos4] «#»]+$pos1+1)r
n :local pos3 ([:find [:pick $content ($pos2+1) $pos4] «!»]+$pos2)r
n :set sitename [:pick $content 0 ($pos1)]r
n :set gigs [:pick $content ($pos1+1) $pos2]r
n :set email [:pick $content ($pos2+1) ($pos3+1)]r
n :set totalcurrent [/queue simple get $i bytes]r
n :set lastwarning [:pick $content ($pos3+2) ($pos3+4)]r
n :local pos5 [:find $totalcurrent «/»]r
n :local pos6 [:len $totalcurrent]r
n :set bytesupcurrent ([:pick $totalcurrent 0 ($pos5)])r
n :set bytesdowncurrent ([:pick $totalcurrent ($pos5+1) $pos6])r
n :set megsupcurrent ($bytesupcurrent / 1048576)r
n :set bytesdownsaved ([:pick $content ($pos3+5) $pos4])r
n :set bytestotal ($bytesdowncurrent + $bytesdownsaved)r
n :set megsdowncurrent ($bytestotal / 1048576)r
nr
n#Begin calculating usage percentager
n :set percentage ( ( $bytestotal * 100) / ($gigs * 1073741824 ) )r
n :log info «$sitename: $percentage%»r
n :if ([$percentage] < 50) do={ :set warninglevel «00» }r n :if ([$percentage] > 50) do={r
n :if ([$percentage] < 75) do={ :set warninglevel «50» }r n :if ([$percentage] > 75) do={ :set warninglevel «75» }r
n }r
n :if ([$percentage] > 75) do={r
n :if ([$percentage] < 90) do={ :set warninglevel «75» }r n :if ([$percentage] > 90) do={ :set warninglevel «90» }r
n }r
n :if ([$percentage] > 90) do={r
n :if ([$percentage] < 100) do={ :set warninglevel «90» }r n :if ([$percentage] > 100) do={ :set warninglevel «99» }r
n }r
nr
n# Parse warning necessityr
n :if ([$warninglevel] > $lastwarning ) do={ :set warn «true» ; :set update «true» }r
n :if ([$warninglevel] = $lastwarning ) do={ :set warn «false» ; :set update «false» }r
n :if ([$warninglevel] < $lastwarning ) do={ :set warn «false» ; :set update «true» }r
nr
n#Update Warning Levelsr
n :if ([$update] = true ) do={ :set newwarning $warninglevel } else={ :set newwarning $lastwarning }r
n :if ([$warn] = true ) do={r
n#Check for email address in queue commentr
n :if ([$email] != «» ) do={r
n /tool e-mail send server=$mailserver from=$fromaddress to=»$email» subject=»$sitename: Usage at $percentage» body=»This message is to inform you of the current usage for $sitenamer
nThe current warning trigger is $warninglevel%.r
nr
nThis site has downloaded $megsdowncurrent MB, which is over $percentage% of the $gigs GB monthly download allowance.r
nr
nThis is an Automatically generated E-mail that is sent out when users reach 50%, 75%, 90% and 100% of their cap.r
nr
nTraffic Monitor System,r
n$fromaddress»r
n}r
n#Send email to support/accounts alsor
n /tool e-mail send server=$mailserver from=$fromaddress to=$adminaddress subject=»$sitename: Usage at $percentage» body=»Current usage for $sitename — trigger is $warninglevel%.r
n$megsdowncurrent MB, which is over $percentage% of the $gigs GB monthly download allowance.r
nTraffic Monitor System»r
n:log info «Sent Warning Level $warninglevel% to $email»r
n}r
n#Set new warning level on queue commentr
n/queue simple set $i comment=»$sitename!$gigs#$email!$newwarning#$bytestotal»r
n/queue simple reset-counters $ir
n}r
n}»
add name=monthlyreport policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=»:global mailserverr
n:global adminaddressr
n:global fromaddressr
n:local contentr
n:local ir
n:local sitenamer
n:local gigsr
n:local emailr
n:local megstotalr
n:local totalcurrentr
n:local bytesdowncurrentr
n:local bytesupcurrentr
n:local megsdowncurrentr
n:local megsupcurrentr
n:local percentager
n:local bytesdownsavedr
n:local bytesdowntotalr
nr
n#Script based on Automated billing script at http://wiki.mikrotik.com/wiki/AutomatedBillingr
n#This version created by Andrew Cox — http://www.accessplus.com.aur
n#v1.4 Updated 15th June 2009r
n:log info «—— Begining Monthly Reports ——-«r
n#For each queue in the listr
n:foreach i in=[/queue simple find comment !=»»] do={r
nr
n#Pull comment out of queue and divide up accordinglyr
n:set content [/queue simple get $i comment] r
nr
n#Determine variables from commentr
n#Format is: sitename ! gigsallowed # who-to-email ! last warning level(0-50-75-90-100)r
n:if ( [ :find $content «!» ] != «» ) do={r
n :local pos1 [:find $content «!»]r
n :local pos4 [:len $content]r
n :local pos2 ([:find [:pick $content ($pos1+1) $pos4] «#»]+$pos1+1)r
n :local pos3 ([:find [:pick $content ($pos2+1) $pos4] «!»]+$pos2)r
n :set sitename [:pick $content 0 ($pos1)]r
n :set gigs [:pick $content ($pos1+1) $pos2]r
n :set email [:pick $content ($pos2+1) ($pos3+1)]r
n :set totalcurrent [/queue simple get $i bytes]r
n :local pos5 [:find $totalcurrent «/»]r
n :local pos6 [:len $totalcurrent]r
n :set bytesupcurrent ([:pick $totalcurrent 0 ($pos5)])r
n :set bytesdowncurrent ([:pick $totalcurrent ($pos5+1) $pos6])r
n :set megsupcurrent ($bytesupcurrent / 1048576)r
n :set bytesdownsaved ([:pick $content ($pos3+5) $pos4])r
n :set bytesdowntotal ($bytesdowncurrent + $bytesdownsaved)r
n :set megsdowncurrent ($bytesdowntotal / 1048576)r
nr
n#Begin calculating usage percentager
n :set percentage ( ( $bytesdowntotal * 100 ) / ( $gigs * 1073741824 ) )r
n :log info «$sitename: $percentage%»r
n:if ([$email] != «» ) do={r
n/tool e-mail send server=$mailserver from=$fromaddress to=$email subject=»$sitename: Monthly Report» body=»This message is to inform you of the full monthly usage for $sitenamer
nr
nIn this month this site has downloaded $megsdowncurrent MB, which is $percentage% of the $gigs GB monthly download allowance.r
nr
nThis is an Automatically generated E-mail that is sent out at the end of each month.r
nr
nTraffic Monitor System,r
n$fromaddress»r
n}r
n#Send email to support/accounts alsor
n /tool e-mail send server=$mailserver from=$fromaddress to=$adminaddress subject=»$sitename: Monthly Report» body=»Full monthly usage for $sitenamer
nIn this month this site has downloaded $megsdowncurrent MB, which is $percentage% of the $gigs GB monthly download allowance.r
nr
nTraffic Monitor System,r
nPlease report any errors in this message to $fromaddress»r
n:log info «Sent monthly report for $sitename to $email»r
n#Set warning level on queue comment back to 00 and reset countersr
n/queue simple set $i comment=»$sitename!$gigs#$email!00#0000″r
n/queue simple reset-counters $ir
n}r
n}»
add name=manualusagereport policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=»:global mailserverr
n:global adminaddressr
n:global fromaddressr
n:local contentr
n:local ir
n:local sitenamer
n:local gigsr
n:local emailr
n:local megstotalr
n:local totalcurrentr
n:local bytesdowncurrentr
n:local bytesupcurrentr
n:local megsdowncurrentr
n:local megsupcurrentr
n:local percentager
n:local lastwarningr
n:local warninglevelr
n:local warnr
n:local updater
n:local newwarningr
n:local bytesdownsavedr
n:local bytestotalr
n:local textr
n:local combinedtextr
n:set combinedtext «»r
nr
n#Scripts based on Automated billing script at http://wiki.mikrotik.com/wiki/AutomatedBillingr
n# This version created by Andrew Cox — http://www.accessplus.com.aur
n#v1.4 Updated 15th June 2009r
n:log info «—— Begining Manual Usage Reports ——-«r
nr
n#For each queue in the listr
n:foreach i in=[/queue simple find comment !=»»] do={r
nr
n#Pull comment out of queue and divide up accordinglyr
n:set content [/queue simple get $i comment] r
nr
n#Determine variables from commentr
n#Format is: sitename ! gigsallowed # who-to-email ! last warning level(0-50-75-90-99) # data-used (0000)r
n:if ([:find $content «!»] != «») do={r
n :local pos1 [:find $content «!»]r
n :local pos4 [:len $content]r
n :local pos2 ([:find [:pick $content ($pos1+1) $pos4] «#»]+$pos1+1)r
n :local pos3 ([:find [:pick $content ($pos2+1) $pos4] «!»]+$pos2)r
n :set sitename [:pick $content 0 ($pos1)]r
n :set gigs [:pick $content ($pos1+1) $pos2]r
n :set email [:pick $content ($pos2+1) ($pos3+1)]r
n :set totalcurrent [/queue simple get $i bytes]r
n :set lastwarning [:pick $content ($pos3+2) ($pos3+4)]r
n :local pos5 [:find $totalcurrent «/»]r
n :local pos6 [:len $totalcurrent]r
n :set bytesupcurrent ([:pick $totalcurrent 0 ($pos5)])r
n :set bytesdowncurrent ([:pick $totalcurrent ($pos5+1) $pos6])r
n :set megsupcurrent ($bytesupcurrent / 1048576)r
n :set bytesdownsaved ([:pick $content ($pos3+5) $pos4])r
n :set bytestotal ($bytesdowncurrent + $bytesdownsaved)r
n :set megsdowncurrent ($bytestotal / 1048576)r
nr
n#Begin calculating usage percentager
n :set percentage ( ( $bytestotal * 100) / ($gigs * 1073741824 ) )r
n :log info «$sitename: $percentage% — $megsdowncurrent MB used — Allowance is $gigs GB»r
n :set text «$combinedtext \n $sitename: $percentage% — $megsdowncurrent MB used — Allowance is $gigs GB»r
n :set combinedtext «$text»r
n }r
n}r
n:log info «—— Ending Manual Usage Reports ——-«r
n:local time [/system clock get time]r
n/tool e-mail send server=$mailserver from=$fromaddress to=$adminaddress subject=»Manual usage report» body=»Site Usage report — Runtime: $timer
n$textr
nr
nRegards,r
n$fromaddress»»
add name=gen-usage-queues policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive source=
«#change the target address range to match what you want to generate.r
n:local xr
n:for x from 1 to 254 do={/queue simple add target-address=»192.168.0.$x» queue=»default/default»}»

You do not have the required permissions to view the files attached to this post.

В mikrotik нет встроенной подсветки синтаксиса в System — scripts. Зато подсветка есть в терминале. Если нужно быстро найти ошибку  сохраняем наш скрипт, в терминале пишем

/system script print from=script name

где script name — имя нашего скрипта.

Join @AdmNtsRu on Telegram

Смотрите также:

Учет и контроль компьютеров в сети

Настройка удаленного доступа в маршрутизаторах Mikrotik

Mikrotik анонсировал RB941-2nD-TC: hAP lite с обновленным дизайном

Multiple WLAN — гостевой wi-fi доступ на прошивке dd-wrt

alexanderx10

Сообщения: 52
Зарегистрирован: 23 дек 2013, 14:06

Коллеги кто нибудь знает инструмент для поиска ошибок в скрипах для Router OS ?? Скрипты раньше не писал, вот пришлось начинать.
А писать методом научного тыка как то не хочеться. Тем более в самом начале.

vqd

Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

28 авг 2014, 20:08

copy/paste в консоль

-user-

Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

29 авг 2014, 12:00

alexanderx10 писал(а):Коллеги кто нибудь знает инструмент для поиска ошибок в скрипах для Router OS ?? Скрипты раньше не писал, вот пришлось начинать.
А писать методом научного тыка как то не хочеться. Тем более в самом начале.

сори что влезаю с нубскими советами…, но мне кажеться я бы начал копать с:

Starting from v6.2 scripting has ability to catch run-time errors.
For example, :reslove command if failed will throw an error and break the script.

Код: Выделить всё

:do {
      :put [:resolve www.example.com];
} on-error={ :put "resolver failed"};
:put "lala"

output:

resolver failed
lala

а по хотелке: вместо put наверное log использовать (если напрягает в терминале забивать)

не, не угадал? :smu:sche_nie: :-)
или нужны именно проверки на правильность самого написания команд? ))) типо подсветка синтаксиса и прочее?

alexanderx10

Сообщения: 52
Зарегистрирован: 23 дек 2013, 14:06

29 авг 2014, 14:26

-user- писал(а):

alexanderx10 писал(а):Коллеги кто нибудь знает инструмент для поиска ошибок в скрипах для Router OS ?? Скрипты раньше не писал, вот пришлось начинать.
А писать методом научного тыка как то не хочеться. Тем более в самом начале.

сори что влезаю с нубскими советами…, но мне кажеться я бы начал копать с:

Starting from v6.2 scripting has ability to catch run-time errors.
For example, :reslove command if failed will throw an error and break the script.

Код: Выделить всё

:do {
      :put [:resolve www.example.com];
} on-error={ :put "resolver failed"};
:put "lala"

output:

resolver failed
lala

а по хотелке: вместо put наверное log использовать (если напрягает в терминале забивать)

не, не угадал? :smu:sche_nie: :-)
или нужны именно проверки на правильность самого написания команд? ))) типо подсветка синтаксиса и прочее?


ДА. Прямо в цель!!

По порядку copy / paste знаю такюй фунцию )) уже хорошо.
Да типо подстветки синтаксиса и прочее. Что имеется ввиду под прочее.. Допусти если писать что на php есть программа phpstorm которая не только подсвечивает синтаксис но и указавает на ошибки, у казывать на ошибки может и сам php если включить такую опцию. Незряли все проф. инструменты написания кода содержит дебагер. Не просто же его туда впихивают. Мне предстоит написать ближаещее время десяток больших скриптов, и так как я с этим раньше не сталкивался, мне будет трудновато понять где я забыл поставит скобку или запятую после echo, if , else и так далее.

-user-

Сообщения: 30
Зарегистрирован: 21 мар 2013, 10:05

29 авг 2014, 15:23

alexanderx10 писал(а):Да типо подстветки синтаксиса и прочее

Ну это только, как Вам ответили выше )) копипастингом в терминал…. о других способах не видел информации, да и зачем что-то другое нужно, если оно уже полнофункциональное есть….
Я сам пока делал все в NOTEPAD++ он проблемы со скобками хорошо показывает…. а потом копипаст в терминал… и там уже и место ошибки покажет.

wolf_ktl писал(а):А я делаю вывод логов с нужными переменными )))

я думаю, так же буду поступать в дальнейшем… пока put хватало (но я еще с МТ — без году неделя ;;-))) )

Debug mikrotik script

В mikrotik нет встроенной подсветки синтаксиса в System — scripts. Зато подсветка есть в терминале. Если нужно быстро найти ошибку  сохраняем наш скрипт, в терминале пишем

  • /system script print from=script name

где script name — имя нашего скрипта.

Популярные сообщения из этого блога

Zabbix agent установка и настройка

Изображение

Zabbix agent — основная информация Важное преимущество — разработан командой Zabbix именно под свой Zabbix server. — разработан на языке C — может собирать данные с процессора, памяти, диска и сетевого интерфейса — малый размер и низкий ресурс — благодаря малой занимаемой площади и широкой настройкой агент может работать на устройствах с ограниченными ресурсами — конфигурации мониторинга централизованы на сервере Zabbix, что упрощает управление агентом Zabbix — может использовать один файл конфигурации на всех серверах. — может работать на различных поддерживаемых платформах, включая Linux, UNIX и Windows Linux IBM AIX FreeBSD NetBSD OpenBSD HP-UX Mac OS X SolarisWindows: все версии для рабочих станций и серверов начиная с 2000 Функции агента Ниже приведен список проверок Zabbix агента из коробки. Следует отметить, однако, что встроенные функции агента могут быть расширены с помощью следующих методов: загружаемые модулей , пользовательских п

mikbill расшифровка завершений сессий

Сессии Lost-Сarrier Потеря несущей, чаще всего у абонента потери в? локалке? и нужно проверять?физику линии. Так же может быть вызвано отключением? подключения по локальной сети? у абонента вместо отключения ?интернет соединения? Для Wi-Fi и других роутеров означает что выключили питание на этом устройстве. User-Request Нормальное завершение Сессии. Пользователь закрыл соединение. Online Пользователь находится в интернете. Admin-Reboot Перезагрузка сервера доступа(NAS). Сервер корректно завершил соединение. BILL-Request Выброшен из интернета из админки биллинга. NAS-Request Сервер доступа по запросу завершил сессию ( те кто-то его выкинул ). NAS-Error Вызвана неправильными параметрами сессии, устранять администратору. Port-Error Вызвана неправильными параметрами сессии, устранять администратору. Admin Reset Сессия или порт сброшены администратором. User Error Ошибка в полученных от пользователя данных, вызвавшая прекращение сеанса

Accel-ppp команды

Просмотр активных сессий: accel-cmd show sessions Количество сессий accel-cmd show sessions|  wc -l Количество сессий в ожидании accel-cmd show sessions|grep start| wc -l Прервать сессию: accel-cmd terminate ip 1.2.3.4 Перечитать конфигурацию: accel-cmd reload Просмотр логов: tail -f /var/log/accel-ppp/accel-ppp.log Остановить accel: /etc/init.d/accel stop Запустить accel: /etc/init.d/accel start Аптайм accel-cmd show stat uptime Firewall: Запустить (создает правила) /etc/init.d/firewall start Остановить (удаляет все правила): /etc/init.d/firewall stop Перезапустить (удаляет и заново создает правила): /etc/init.d/firewall restart Обновить список разрешенных сайтов/IP: /etc/init.d/firewall allow Обновить цепочку правил forward: /etc/init.d/firewall forward Обновить цепочку правил prerouting: /etc/init.d/firewall pre Обновить цепочку правила postrouting /etc/init.d/firewall po

Skip to content

  • View menu
  • View sidebar

e3fi389

RTFMLIAA: system management. always. everywhere.

Also you can check syntax errors by typing:

/system script> print from=<your script name>

Console will mark character where syntax error starts.

  • Mikrotik ошибки на порту как посмотреть
  • Mikrotik no route to host ошибка как исправить
  • Mikrotik l2tp ошибка 789
  • Migun hy 7000e ошибка e2
  • Might magic heroes vi выдает ошибку