Я предоставляю этот скрипт как альтернативу примеру скрипта, приведённому в примерах по адресу . Скрипт работает аналогично, используя пул-сервис ntp.org для настройки и установки IP-адресов NTP-серверов в конфигурации SNTP-клиента Mikrotik. Скрипт, который я представляю, основан на примере кода по указанной ссылке. Он проще, компактнее и представляет собой одиночный скрипт, который не зависит от глобальных переменных.
Этот скрипт не использует и не отправляет электронные письма, поэтому для некоторых пользователей он может быть не подходящей альтернативой. Скрипт довольно легко настраивается и используется. Сохраните скрипт в ROS, задайте имя скрипта, установите массив arrNtpSystems с основным и вторичным NTP-пулом на основе данных с . По умолчанию скрипт настроен для Северной Америки. Запланируйте регулярный запуск скрипта.
# SetNtpServers — проверка и установка NTP-серверов из NTP-пула
# v1.2 Проверено и разработано на ROS v5.7
#
# При необходимости измените следующую строку, имя в progName должно совпадать с именем скрипта
:local progName "SetNtpServers";
# Массив NTP-пулов для использования (проверьте на , один или максимум два — основной и резервный
# Измените следующую строку и переменную массива в зависимости от вашего региона (по умолчанию — Северная Америка).
:local arrNtpSystems ("0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org");
# В качестве альтернативы можно использовать пул для США:
#:local arrNtpSystems ("0.us.pool.ntp.org", "1.us.pool.ntp.org");
#
# Дальнейших изменений не требуется.
:put "$progName: Запуск...";
:log info "$progName: Запуск...";
:set arrNtpSystems [ :toarray $arrNtpSystems ];
:if (( [ :len $arrNtpSystems ] < 1 ) or ( [ :len $arrNtpSystems ] > 2 )) do={
:put "$progName: ОШИБКА — массив NTP-систем (\$arrNtpSystems) должен содержать один или два DNS-имени.";
:log info "$progName: ОШИБКА — массив NTP-систем (\$arrNtpSystems) должен содержать один или два DNS-имени.";
} else={
:local arrRosNtpSetting ("primary-ntp", "secondary-ntp");
:local i 0;
:foreach strNtpSystem in ($arrNtpSystems) do={
:local ipAddrNtpSystem [ :resolve $strNtpSystem ];
:local strRosNtpSetting [ :pick $arrRosNtpSetting $i ];
:local strCurrentNtpIp [ /system ntp client get $strRosNtpSetting ];
:put "$progName: DNS-имя NTP-сервера $strNtpSystem разрешилось в $ipAddrNtpSystem.";
:log info "$progName: DNS-имя NTP-сервера $strNtpSystem разрешилось в $ipAddrNtpSystem.";
:put "$progName: Текущая настройка $strRosNtpSetting — $strCurrentNtpIp.";
:log info "$progName: Текущая настройка $strRosNtpSetting — $strCurrentNtpIp.";
:if ( [ :toip $ipAddrNtpSystem ] != [ :toip $strCurrentNtpIp ] ) do={
:put "$progName: Изменяем настройку $strRosNtpSetting на $ipAddrNtpSystem.";
:log info "$progName: Изменяем настройку $strRosNtpSetting на $ipAddrNtpSystem.";
:local strCommand [ :parse "/system ntp client set $strRosNtpSetting=\"$ipAddrNtpSystem\"" ];
$strCommand;
} else={
:put "$progName: Для настройки $strRosNtpSetting изменений не требуется.";
:log info "$progName: Для настройки $strRosNtpSetting изменений не требуется.";
}
:set i ($i + 1);
}
}
:put "$progName: Готово.";
:log info "$progName: Готово.";
Создайте запись планировщика с примерно таким содержанием:
/system scheduler
add comment="Check and set NTP servers" disabled=no interval=12h name=SetNtpServers on-event=SetNtpServers policy=read,write,test start-date=oct/01/2011 start-time=00:00:00
Этот скрипт не использует и не отправляет электронные письма, поэтому для некоторых пользователей он может быть не подходящей альтернативой. Скрипт довольно легко настраивается и используется. Сохраните скрипт в ROS, задайте имя скрипта, установите массив arrNtpSystems с основным и вторичным NTP-пулом на основе данных с . По умолчанию скрипт настроен для Северной Америки. Запланируйте регулярный запуск скрипта.
# SetNtpServers — проверка и установка NTP-серверов из NTP-пула
# v1.2 Проверено и разработано на ROS v5.7
#
# При необходимости измените следующую строку, имя в progName должно совпадать с именем скрипта
:local progName "SetNtpServers";
# Массив NTP-пулов для использования (проверьте на , один или максимум два — основной и резервный
# Измените следующую строку и переменную массива в зависимости от вашего региона (по умолчанию — Северная Америка).
:local arrNtpSystems ("0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org");
# В качестве альтернативы можно использовать пул для США:
#:local arrNtpSystems ("0.us.pool.ntp.org", "1.us.pool.ntp.org");
#
# Дальнейших изменений не требуется.
:put "$progName: Запуск...";
:log info "$progName: Запуск...";
:set arrNtpSystems [ :toarray $arrNtpSystems ];
:if (( [ :len $arrNtpSystems ] < 1 ) or ( [ :len $arrNtpSystems ] > 2 )) do={
:put "$progName: ОШИБКА — массив NTP-систем (\$arrNtpSystems) должен содержать один или два DNS-имени.";
:log info "$progName: ОШИБКА — массив NTP-систем (\$arrNtpSystems) должен содержать один или два DNS-имени.";
} else={
:local arrRosNtpSetting ("primary-ntp", "secondary-ntp");
:local i 0;
:foreach strNtpSystem in ($arrNtpSystems) do={
:local ipAddrNtpSystem [ :resolve $strNtpSystem ];
:local strRosNtpSetting [ :pick $arrRosNtpSetting $i ];
:local strCurrentNtpIp [ /system ntp client get $strRosNtpSetting ];
:put "$progName: DNS-имя NTP-сервера $strNtpSystem разрешилось в $ipAddrNtpSystem.";
:log info "$progName: DNS-имя NTP-сервера $strNtpSystem разрешилось в $ipAddrNtpSystem.";
:put "$progName: Текущая настройка $strRosNtpSetting — $strCurrentNtpIp.";
:log info "$progName: Текущая настройка $strRosNtpSetting — $strCurrentNtpIp.";
:if ( [ :toip $ipAddrNtpSystem ] != [ :toip $strCurrentNtpIp ] ) do={
:put "$progName: Изменяем настройку $strRosNtpSetting на $ipAddrNtpSystem.";
:log info "$progName: Изменяем настройку $strRosNtpSetting на $ipAddrNtpSystem.";
:local strCommand [ :parse "/system ntp client set $strRosNtpSetting=\"$ipAddrNtpSystem\"" ];
$strCommand;
} else={
:put "$progName: Для настройки $strRosNtpSetting изменений не требуется.";
:log info "$progName: Для настройки $strRosNtpSetting изменений не требуется.";
}
:set i ($i + 1);
}
}
:put "$progName: Готово.";
:log info "$progName: Готово.";
Создайте запись планировщика с примерно таким содержанием:
/system scheduler
add comment="Check and set NTP servers" disabled=no interval=12h name=SetNtpServers on-event=SetNtpServers policy=read,write,test start-date=oct/01/2011 start-time=00:00:00
