Спасибо за совет, alphil. asesko, кажется, я нашёл способ успешно использовать команду ppp-client info внутри скрипта. Нужно использовать счётчик и дать циклу отработать минимум 3 раза, чтобы системные переменные корректно установились. После этого их можно использовать по необходимости. Главное — «убить» процесс скрипта после завершения. Я написал два скрипта. Первый называется pppUptime, он использует команду ppp-client monitor для получения времени работы интерфейса. Второй — pppInfoUptime, он использует ppp-client info, но при этом запускает скрипт pppUptime, чтобы получить время работы и добавить его в информационный файл и письмо. Надеюсь, эти скрипты будут полезны. Я потратил на это много часов и многому научился. Приятного пользования!
pppUptimeOnly:
## Этот скрипт просто устанавливает глобальную переменную pppUptime для "wan2" в примере. ##
## Название скрипта в примере — pppUptime ##
## Используется вместе с моим другим скриптом pppInfo ##
## Делитесь, модифицируйте, улучшайте и используйте на здоровье ##
## Проверено на RouterOS v5.12 с модемом Huawei E367 ##
## Peter James 17.03.2012 ##
## Укажите имя PPP-интерфейса, для которого нужно получить время работы ##
:local pppName "wan2";
# счетчик цикла #
:local k 0;
# объявляем глобальной, чтобы другой скрипт мог использовать #
:global pppUptime;
:local pppID [/interface ppp-client find name=$pppName];
:log info "Запуск скрипта PPP Uptime для $pppName";
# Начало команды monitor #
/interface ppp-client monitor $pppName do={
:set k ($k+1);
# запускаем цикл два раза, чтобы наверняка #
:if ($k=2) do={
:set pppUptime $"uptime";
## Теперь нужно остановить скрипт, иначе Monitor будет работать вечно ##
:log info "Скрипт PPP Uptime для $pppName завершён";
/system script job remove [find script=pppUptime];
}
}
pppInfoUptime (запускает вышеописанный скрипт pppUptimeOnly):
## Скрипт для записи информации PPP в файл и отправки на Email ##
## В моём примере имя PPP — "wan2" ##
## Имя скрипта — "wan2PPPinfoUptime" ##
## Использует команду ppp-client info ##
## с циклом для остановки команды после получения данных ##
## Можно использовать вместе с моим другим скриптом pppUptime, если нужно время работы ##
## Можно использовать файл info для других целей ##
## Не забудьте настроить Tools-Email ##
## Делитесь, меняйте, улучшайте и используйте как хотите ##
## Проверено на RouterOS v5.12 с модемом Huawei E367 ##
## Peter James 17.03.2012 ##
# Установите имя PPP-интерфейса #
:local pppName "wan2";
# Укажите email для получения отчёта PPP Info #
:local emailAddress "your_email_address"
:local i 0;
global pppUptime;
:local pppID [/interface ppp-client find name=$pppName];
# Переменные для хранения информации PPP #
:local String1;
:local String2;
:local pppInfoString;
# Переменная для текущего IP PPP-интерфейса #
:local currentIP;
# Получаем имя системы #
:local SystemID [/system identity get name];
:local pppStatus;
:if ([/interface get [find name=$pppName] running]=true) do={
:set pppStatus "Работает";
### Получаем адрес указанного wan-интерфейса ###
:set currentIP [/ip address get [find interface=$pppName] address];
:set currentIP [:pick $currentIP 0 [:find $currentIP "/"]]
} else={
:set pppStatus "Отключён";
}
# Запускаем скрипт pppUptime #
# Закомментируйте, если он не нужен #
/system script run pppUptime;
:log info "Запуск скрипта PPP Info для $pppName";
# Создаём файл с информацией #
/file print file="$SystemID-$pppName-PPP-info";
:global SysDate [/system clock get date];
:global SysTime [/system clock get time];
# Начало команды info #
/interface ppp-client info $pppID do={
:set i ($i+1);
# по какой-то причине цикл должен пройти минимум 3 раза для установки переменных #
# ставим 5 повторов для надёжности #
:if ($i=5) do={
# прочие данные, не из info команды #
:set String1 "Дата: $SysDate\nВремя: $SysTime\nИмя системы: $SystemID\nPPP Интерфейс: $pppName\nСтатус интерфейса: $pppStatus\nIP адрес: $currentIP\nВремя работы: $pppUptime\n";
:set String2 "Статус модема: $"status"\nPIN статус: $"pin-status"\nФункциональность: $"functionality"\nПроизводитель: $"manufacturer"\nМодель: $"model"\nВерсия: $"revision"\nСерийный номер: $"serial-number"\nТекущий оператор: $"current-operator"\nТехнология доступа: $"access-technology"\nУровень сигнала: $"signal-strengh"";
:set pppInfoString "$String1$String2";
:log info $pppInfoString;
# Записываем необходимую информацию в файл #
/file set "$SystemID-$pppName-PPP-info" contents=$pppInfoString;
# Здесь можно сделать всё, что потребуется (например, отправить почту) #
# Пример отправки Email #
:log info "Отправка Email с PPP Info";
/tool e-mail send tls=yes subject="$SystemID $pppName PPP Info" to=$emailAddress body="$pppInfoString";
:log info "Скрипт PPP Info для $pppName завершён";
## Теперь нужно остановить скрипт, иначе info будет работать вечно ##
/system script job remove [find script=wan2PPPinfoUptime];
}
}