Скрипт удаления ppp

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
vasgor
Сообщения: 8
Зарегистрирован: 12 ноя 2018, 15:55
Откуда: Витебск

Скрипт удаления ppp

Сообщение vasgor »

Есть необходимость, например перед обновлением mikrotik, дропать PPP соединения, чтобы клиенты плавно переключались на другой.
Для этого был написан скрипт:

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

:local NumConns [/ppp active print count-only]
:log info ("Preparing to disconnect " . $NumConns . " VPN Sessions")
:local iCounter 0
:while ($iCounter < $NumConns) do={
	:log info ("Removing VPN Session #" . $iCounter)
	/ppp active remove $iCounter
                :delay 1s
	:set iCounter ($iCounter + 1)
}
Но проблема в том, что о дропает до какого-то момента, а потом перестает. Пробовали разные варианты, в итоге ничего не вышло...

Прошу знатоков помочь в решении данной задачи! :)
Аватара пользователя
Chupaka
Сообщения: 4089
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Скрипт удаления ppp

Сообщение Chupaka »

Пользоваться порядковым номером нужно только при ручной работе, потому что он существует и обновляется после команды print. Более того, если кто-то в процессе отключится - его отключить больше не получится.

А вам именно плавно надо, по одному в секунду? Сразу всех не прокатит?

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

/ppp active remove [find]
Тогда надо через :foreach, ну и ловить ошибки при попытке удаления:

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

:foreach i in=[ /ppp active find ] do={
	:do { /ppp active remove $i; } on-error={};
	:delay 1s;
}
Аватара пользователя
vasgor
Сообщения: 8
Зарегистрирован: 12 ноя 2018, 15:55
Откуда: Витебск

Re: Скрипт удаления ppp

Сообщение vasgor »

Да, сразу всех не прокатит, от 1 до 5 в секунду нужно.
Поэтому и делали через delay.