Продолжение скрипта при ошибке

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Продолжение скрипта при ошибке

Сообщение Sir_Prikol »

Доброго времени суток

Есть скрипт (ниже), в чистит коннтрак (так сложилось что это баг ROS и приходится скриптом реализовывать), возникла проблема, иногда, в цикле, возникает ошибка и эта зараза останавливает работу.

Не то чтобы лень думать и копать старые темы, просто что-бы я не предпринимал - при ошибке он всё равно тормозиться, при выполнении ручками - отрабатывает.

Действия задвоены специально, для полной уверенности что очистит коннтрак

Ткните носом, куда вставить проверку на ошибку, чтоб оно отрабатывало

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

/interface 6to4 set disabled=yes [find comment="EU"];
:foreach p in=[/routing bgp peer find where name="EU"] do={
	/routing bgp peer disable $p;
               
}
:foreach i in=[/ip firewall connection find dst-address~"^62.205.157.173"] do={ /ip firewall connection remove $i } 
:foreach ii in=[/ip firewall connection find src-address~"^62.205.157.173"] do={ /ip firewall connection remove $ii } 
/ip firewall connection remove [find where src-address~"^62.205.157.173"]
/ip firewall connection remove [find where dst-address~"^62.205.157.173"]
:foreach i in=[/ipv6 firewall connection find dst-address~"^2a01:d0:7fff:f7::1"] do={ /ip firewall connection remove $i } 
:foreach ii in=[/ipv6 firewall connection find src-address~"^2a01:d0:7fff:f7::1"] do={ /ip firewall connection remove $ii } 
/ipv6 firewall connection remove [find where src-address~"^2a01:d0:7fff:f7::1"]
/ipv6 firewall connection remove [find where dst-address~"^2a01:d0:7fff:f7::1"]
:foreach i in=[/ip firewall connection find dst-address~"^62.205.157.173"] do={ /ip firewall connection remove $i } 
:foreach ii in=[/ip firewall connection find src-address~"^62.205.157.173"] do={ /ip firewall connection remove $ii } 
/ip firewall connection remove [find where src-address~"^62.205.157.173"]
/ip firewall connection remove [find where dst-address~"^62.205.157.173"]
:foreach i in=[/ipv6 firewall connection find dst-address~"^2a01:d0:7fff:f7::1"] do={ /ip firewall connection remove $i } 
:foreach ii in=[/ipv6 firewall connection find src-address~"^2a01:d0:7fff:f7::1"] do={ /ip firewall connection remove $ii } 
/ipv6 firewall connection remove [find where src-address~"^2a01:d0:7fff:f7::1"]
/ipv6 firewall connection remove [find where dst-address~"^2a01:d0:7fff:f7::1"]
/interface 6to4 set disabled=no [find comment="EU"];
:foreach p in=[/routing bgp peer find where name="EU"] do={
	/routing bgp peer enable $p;
               
}
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4098
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Продолжение скрипта при ошибке

Сообщение Chupaka »

Доброго. Надо каждый remove обернуть в :do - on-error: https://wiki.mikrotik.com/wiki/Manual:S ... ime_errors
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Продолжение скрипта при ошибке

Сообщение Sir_Prikol »

типа такого

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

:do {
	/ip firewall connection remove [find where src-address~"^62.205.157.173"];
} on-error={ :log warning "Finished"};
:log warning "EU - dst - cleared";
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4098
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Продолжение скрипта при ошибке

Сообщение Chupaka »

Это не удалит все нужные записи при ошибке, а скрипт в первом сообщении - будет удалять всё, даже если наткнётся на несколько уже отсутствующих
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Продолжение скрипта при ошибке

Сообщение Sir_Prikol »

Сорри, это была выдержка из общего скрипта. От жары и перенапряжения, совсем голова не варит :(
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4098
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Продолжение скрипта при ошибке

Сообщение Chupaka »

Я имею в виду, что конструкция вида

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

:do {
	/ip firewall connection remove [find where src-address~"^62.205.157.173"];
} on-error={};
в случае возникновения ошибки в середине процесса удаления удалит только первую половину записей. А вот как в первом посте, только с обработкой ошибки удаления - удалит все:

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

/ip firewall connection
:foreach i in=[find dst-address~"^62.205.157.173"] do={ 
	:do {
		remove $i
	} on-error={};
}
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Продолжение скрипта при ошибке

Сообщение Sir_Prikol »

Спасибо
Дома: CCR2004 (7-ISP(GPON)белый IP)