Парни,
В какой-то момент перестал работать скрипт оценки состояния процессора и USB-модема. По его запуску с параметрами, которые заведомо приведут к отправке сообщения, ничего не происходит. В логах - ничего. При дебаге скрипта в консоли я не могу понять где именно ошибка - никаких I (invalid) или чего-то красного я не вижу. В какой момент все умерло, не знаю - скрипту пара лет. Сам скрипт, а точнее, два: https://2keep.net/3g-internet-connectio ... -mikrotik/
Кто подскажет куда копнуть?
Перестал работать скрипт после обновления ROS
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
Единственное, какая раскраска есть при дебаге, это черные прямоугольники после некоторых do. Может это и есть проблема?
- Dragon_Knight
- Сообщения: 1724
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
А можно скрипт целиком и текстом пожалуйста...
Но первое что бросается в глаза это:
Но первое что бросается в глаза это:
Код: Выделить всё
#incorrect:
:for i from = 1 to = 2 do = { :put $i }
#correct syntax:
:for i from=1 to=2 do={ :put $i }
:for i from= 1 to= 2 do={ :put $i }
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
Спасибо за ответ.
У меня при вставке в консоль нет строчек #incorrect.
Скрипт состоит из 2 частей. Ниже привожу полный текст:
И modemStatus - вызываемый скрипт из первого:
Заранее благодарю.
У меня при вставке в консоль нет строчек #incorrect.
Скрипт состоит из 2 частей. Ниже привожу полный текст:
Код: Выделить всё
{
##############################
### SETTINGS SECTION BEGIN ###
##############################
# Recipients to send notifications
:global mailAddrTo "yourmail@dom.ru";
:global mailAddrCopy "yourbackupmail@dom2.com";
# CPU load test duration
:global sec 3;
# ICMP packets qty
:local cnt 10;
# Expected qty of received packets
# In this case we send 10 packets and expect 1 or more to be received
:local cntOkRes 1;
# First test host
:local host1 ya.ru;
# Second test host
:local host2 8.8.8.8;
##############################
#### SETTINGS SECTION END ####
##############################
##############################
####### CPU LOAD TEST ########
##############################
:global cpu100 0;
for x1 from=1 to=$sec do {
:if ( [/system resource get cpu-load]="100") do={
:global cpu100 ($cpu100+1);
}
:delay 1;
}
:if ( $cpu100 = $sec ) do={
/tool e-mail send to=$mailAddrTo cc=$mailAddrCopy body="Within $sec seconds, CPU load on Mikrotik was 100%. Mikrotik will be restarted!" subject="$[/system identity get name]. Mikrotik CPU load was 100% on $[/system clock get time] $[/system clock get date]"
:delay 20;
/system reboot;
}
##############################
##### CPU LOAD TEST END ######
##############################
# Checking default route presence
if ([/ip route find where dst-address=0.0.0.0/0] = "") do={
:log warning "No default gateway! USB port will be power cycled!";
# USB port power cycle
/system routerboard usb power-reset duration=5s
:delay 25;
}
# Finding IP address of default GW & looking for traffic via it
:local defGw [/ip route get [/ip route find where dst-address=0.0.0.0/0] gateway];
# Default route's interface lookup
:global ifName [/ip address get [/ip address find where network=$defGw] interface];
# Looking and counting traffic on interface
:global wanTrafTx "0";
:global wanTrafTxRes "0";
:global wanTrafRx "0";
:global wanTrafRxRes "0";
for x from=1 to=5 do {
/interface monitor-traffic [/interface find name=$ifName] once do={
:global wanTrafTx (tx-bits-per-second / 1024);
}
/interface monitor-traffic [/interface find name=$ifName] once do={
:global wanTrafRx (rx-bits-per-second / 1024);
}
if ($wanTrafTx > $wanTrafTxRes) do {
:global wanTrafTxRes $wanTrafTx;
}
if ($wanTrafRx > $wanTrafRxRes) do {
:global wanTrafRxRes $wanTrafRx;
}
:delay 1;
}
# Comparing actual traffic with reference value (30 kbps). If less, ping hosts.
if ($wanTrafTxRes < 30 and $wanTrafRxRes < 30) do {
# Hosts test and setting variables
:local cntRes1 [/ping count=$cnt $host1];
:local cntRes2 [/ping count=$cnt $host2];
# If less than 1 from 10 packets was received
if ($cntRes1 < $cntOkRes and $cntRes2 < $cntOkRes) do {
# Writing data to log
:local logmsg ("Internet connection fail! \n\nCPU Load: ".[/system resource get cpu-load]."% \nWAN speed RX: ".[:tonum $wanTrafRxRes]." kbit/s \nWAN speed TX: ".[:tonum $wanTrafTxRes]." kbit/s \nHost - ".[:tostr $host1]." lost ".[:tonum $cnt] - [:tonum $cntRes1]." packets of ".[:tostr $cnt]." \nHost - ".[:tostr $host2]." lost ".[:tonum $cnt] - [:tonum $cntRes2]." packets of ".[:tostr $cnt]."\n");
:log info $logmsg;
# Disabling default route's interface
/interface ppp-client disable [/interface ppp-client find name=$ifName];
:delay 10;
# Checking modem status / Running "modemStatus" script
execute "/system script run \"modemStatus\"";
:delay 5s;
:global modemStatus;
# Enabling default route's interface
/interface ppp-client enable [/interface ppp-client find name=$ifName];
:delay 20;
# E-maling report
/tool e-mail send to=$mailAddrTo cc=$mailAddrCopy body="$logmsg$modemStatus" subject="$[/system identity get name]. Internet connection fails! $[/system clock get time] $[/system clock get date]"
}
}
}
И modemStatus - вызываемый скрипт из первого:
Код: Выделить всё
:global modemStatus;
:global ifName;
:global rssi;
:global operator;
:local i 0;
/interface ppp-client info $ifName do={
:set i ($i+1);
:if ($i=3) do={
:global rssi "\nSignal: $"signal-strengh"\n";
:global operator "Operator: $"current-operator"";
:set modemStatus "\nModem Status: $"modem-status"\nFunctionality: $"functionality"\nManufacturer: $"manufacturer"\nModel: $"model"\nRevision: $"revision"\nSerial Number: $"serial-number"\nCurrent Operator: $"current-operator"\nAccess Technology: $"access-technology"\nSignal Strength: $"signal-strengh"";
:log info $modemStatus;
:local stop {[:find $"signal-strengh" "dBm";]-1};
:local rssi1 {:tonum [:pick $"signal-strengh" 1 $stop]};
:log info $rssi1;
/system script job remove [find script=modemStatus ];
}}
Заранее благодарю.
- Dragon_Knight
- Сообщения: 1724
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
Ладно, хорошо, попробую ещё раз.
Код: Выделить всё
НЕ правильно:
do = { :put $i }
Правильно:
do={ :put $i }
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
Ну вот черные прямоугольники на пробелах я вижу в дебаге. Вы о том, что они лишние?
- Dragon_Knight
- Сообщения: 1724
- Зарегистрирован: 26 мар 2012, 18:21
- Откуда: МО, Мытищи
- Контактная информация:
После do должен идти знак равенства без пробелов, после знака равенства должна идти открывающая скобочка без пробелов.
Небольшой свод правил логики и ссылок:
- Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
- Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
- Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
- Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
- Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
- name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
- Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
- Мой сайт по Mikrotik: Global Zone >> MikroTik.
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
Спасибо. Вот исправленный вариант без комментов.
Теперь при дебаге нет ни одного прямоугольника с темным фоном.
Скрипт по-прежнему не работает. В нем для проверки я изменил значение cpu со 100 на 1, а также скорость на интерфейсах с 30 kbps на 30000 (у меня такие скорости невозможны физически). В почту ничего не приходит. В логах тоже ничего.
Единственное что сейчас подсвечивается синим болдом (не прямоугольником) - это вхождения "\n". Это норм?
Код: Выделить всё
{
:global mailAddrTo "yourmail@dom.ru";
:global mailAddrCopy "yourbackupmail@dom2.com";
:global sec 3;
:local cnt 10;
:local cntOkRes 1;
:local host1 ya.ru;
:local host2 8.8.8.8;
:global cpu100 0;
for x1 from=1 to=$sec do={
:if ( [/system resource get cpu-load]="1") do={
:global cpu100 ($cpu100+1);
}
:delay 1;
}
:if ( $cpu100 = $sec ) do={
/tool e-mail send to=$mailAddrTo cc=$mailAddrCopy body="Within $sec seconds, CPU load on Mikrotik was 100%. Mikrotik will be restarted!" subject="$[/system identity get name]. Mikrotik CPU load was 100% on $[/system clock get time] $[/system clock get date]"
:delay 20;
/system reboot;
}
if ([/ip route find where dst-address=0.0.0.0/0] = "") do={
:log warning "No default gateway! USB port will be power cycled!";
/system routerboard usb power-reset duration=5s
:delay 25;
}
:local defGw [/ip route get [/ip route find where dst-address=0.0.0.0/0] gateway];
:global ifName [/ip address get [/ip address find where network=$defGw] interface];
:global wanTrafTx "0";
:global wanTrafTxRes "0";
:global wanTrafRx "0";
:global wanTrafRxRes "0";
for x from=1 to=5 do={
/interface monitor-traffic [/interface find name=$ifName] once do={
:global wanTrafTx (tx-bits-per-second / 1024);
}
/interface monitor-traffic [/interface find name=$ifName] once do={
:global wanTrafRx (rx-bits-per-second / 1024);
}
if ($wanTrafTx > $wanTrafTxRes) do={
:global wanTrafTxRes $wanTrafTx;
}
if ($wanTrafRx > $wanTrafRxRes) do={
:global wanTrafRxRes $wanTrafRx;
}
:delay 1;
}
if ($wanTrafTxRes < 30000 and $wanTrafRxRes < 30000) do={
:local cntRes1 [/ping count=$cnt $host1];
:local cntRes2 [/ping count=$cnt $host2];
if ($cntRes1 < $cntOkRes and $cntRes2 < $cntOkRes) do={
:local logmsg ("Internet connection fail! \n\nCPU Load: ".[/system resource get cpu-load]."% \nWAN speed RX: ".[:tonum $wanTrafRxRes]." kbit/s \nWAN speed TX: ".[:tonum $wanTrafTxRes]." kbit/s \nHost - ".[:tostr $host1]." lost ".[:tonum $cnt] - [:tonum $cntRes1]." packets of ".[:tostr $cnt]." \nHost - ".[:tostr $host2]." lost ".[:tonum $cnt] - [:tonum $cntRes2]." packets of ".[:tostr $cnt]."\n");
:log info $logmsg;
/interface ppp-client disable [/interface ppp-client find name=$ifName];
:delay 10;
execute "/system script run \"modemStatus\"";
:delay 5s;
:global modemStatus;
/interface ppp-client enable [/interface ppp-client find name=$ifName];
:delay 20;
/tool e-mail send to=$mailAddrTo cc=$mailAddrCopy body="$logmsg$modemStatus" subject="$[/system identity get name]. Internet connection fails! $[/system clock get time] $[/system clock get date]"
}
}
}
Теперь при дебаге нет ни одного прямоугольника с темным фоном.
Скрипт по-прежнему не работает. В нем для проверки я изменил значение cpu со 100 на 1, а также скорость на интерфейсах с 30 kbps на 30000 (у меня такие скорости невозможны физически). В почту ничего не приходит. В логах тоже ничего.
Единственное что сейчас подсвечивается синим болдом (не прямоугольником) - это вхождения "\n". Это норм?
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
В логах нет попыток скрипта стукнуться в почту.
- EIKA
- Сообщения: 41
- Зарегистрирован: 30 дек 2017, 21:59
Вот еще обратные слеши вокруг вызова субскрипта:
Это ошибка или корректный синтаксис?
Это ошибка или корректный синтаксис?