Инструменты пользователя

Инструменты сайта


mikrotik:rb3011uias:routeros:system:scripts:variables_initialization

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
mikrotik:rb3011uias:routeros:system:scripts:variables_initialization [2020/10/10 13:54]
Николай Солошин
mikrotik:rb3011uias:routeros:system:scripts:variables_initialization [2022/02/12 11:40] (текущий)
Строка 1: Строка 1:
 ====== Инициализация глобальных переменных и SMS ====== ====== Инициализация глобальных переменных и SMS ======
  
-Самый важный, я бы даже сказал, что основоположный скрипт, т.к. без его загрузки при запуске устройства, другие скрипты не будут работать.+Самый важный, я бы даже сказал, что основополагающий скрипт, т.к. без его загрузки при запуске устройства, другие скрипты не будут работать. 
 + 
 +Им инициализируются: 
 + 
 +  - глобальные переменные; 
 +  - глобальные функции; 
 +  - прием и отправка SMS; 
 +  - воспроизведение музыки! :-D
  
 ===== Комментарии к коду ===== ===== Комментарии к коду =====
  
-Используется для тестирования. Если его расскомментировать, скрипт отработает на 50 секунд быстрее, но не будут инициализированы SMS и не будет проиграна музыка запуска.+Используется для тестирования. Если его раскомментировать, скрипт отработает на 50 секунд быстрее, но не будут инициализированы SMS и не будет проиграна музыка запуска.
  
 <code># :local varOnly "yes";</code> <code># :local varOnly "yes";</code>
Строка 18: Строка 25:
 ==== Настройки скрипта ==== ==== Настройки скрипта ====
    
-Настройки для работы SMS. Можно указать вручную, а можно забрать из системы, как тут.+Настройки для работы SMS. Предварительноконечно, [[mikrotik:rb3011uias:routeros:tools:sms|нужно настроить]];-)
  
 <code>:global modemPort [/tool sms get port]; <code>:global modemPort [/tool sms get port];
Строка 142: Строка 149:
  
   * SMS не поддерживает кириллицу.   * SMS не поддерживает кириллицу.
-  * Для передачи кириллицы в Email текст нужно или импортировать с текстом скрипта или набирать непосредственно из редактора кода RouterOS (подробнее в статье о фэйловере).+  * Для передачи кириллицы в Email текст нужно или импортировать с текстом скрипта или набирать непосредственно из редактора кода RouterOS (подробнее в статье о [[mikrotik:rb3011uias:routeros:system:scripts:failover#тексты_писем|фэйловере]]).
  
 ==== Функция проверки состояния каналов ==== ==== Функция проверки состояния каналов ====
Строка 198: Строка 205:
 Вывод предыдущей функции может быть передан этой функции для сохранения результатов проверки на диске устройства. Вывод предыдущей функции может быть передан этой функции для сохранения результатов проверки на диске устройства.
  
-{{ :mikrotik:rb3011uias:routeros:system:scripts:file-list.png?nolink |}}+{{:mikrotik:rb3011uias:routeros:system:scripts:file-list.png?nolink|}}
  
-Пример лог-файла. +:!: Для работы требуется политика ftp!
- +
-<file>Interface;Warning;Date;Time;Received;Total;Level;Mode +
-In-MTS-0;;01.09.2020;09:09:28;8;8;6;test-modem-scheduler +
-In-MTS-0;;01.09.2020;21:09:29;6;8;6;test-modem-scheduler +
-In-MTS-0;;02.09.2020;09:09:28;8;8;6;test-modem-scheduler +
-In-MTS-0;;02.09.2020;21:09:28;8;8;6;test-modem-scheduler +
-In-MTS-0;;03.09.2020;09:09:28;8;8;6;test-modem-scheduler</file> +
- +
-//Для работы требуется политика ftp!//+
  
 <code>:global ispLogging do={</code> <code>:global ispLogging do={</code>
Строка 261: Строка 259:
     }</code>     }</code>
  
-    :if ( [ :typeof $runLogCount ] = "nothing" ) do={ :set runLogCount [ :toarray "" ]; }+Если переменная с указанием текущего количества запусков имеет тип ''nothing'', что нормально после перезагрузки, преобразуем ее в массив.
  
-    :if ( ( $runLogCount -> "$outInt" ) = "66" || [ :typeof ( $runLogCount -> "$outInt" ) ] = "nothing" ) do={+<code>    :if ( [ :typeof $runLogCount ] = "nothing" ) do={ :set runLogCount [ :toarray "" ]; }</code> 
 + 
 +Накручиваем счетчик количества запуска функции. Если он больше ''66'' (65 строк в файле, потом файл становится сильно большим и система начинает глючить) обнуляем этот счетчик, накручиваем ''logFileNum'' и пишем в соответствующий файл. 
 + 
 +<code>    :if ( ( $runLogCount -> "$outInt" ) = "66" || [ :typeof ( $runLogCount -> "$outInt" ) ] = "nothing" ) do={
       :set ( $runLogCount -> "$outInt" ) 0;       :set ( $runLogCount -> "$outInt" ) 0;
       :set ( $logFileNum -> "$outInt" ) ( ( $logFileNum -> "$outInt" ) + 1 );       :set ( $logFileNum -> "$outInt" ) ( ( $logFileNum -> "$outInt" ) + 1 );
Строка 275: Строка 277:
         :set ( $runLogCount -> "$outInt" ) (( $runLogCount -> "$outInt" ) + 1 );         :set ( $runLogCount -> "$outInt" ) (( $runLogCount -> "$outInt" ) + 1 );
       }       }
-  }+  }</code> 
 + 
 +Проверяем частоту создания нового файла (ежедневно или ежемесячно) и пишем в переменную название текущего файла. Если переменная ''newFileAt'' не была передана выходим с ошибкой.
  
-  :if ( $newFileAt = "month" ) do={+<code>  :if ( $newFileAt = "month" ) do={
     :set fileName ( $outInt . "-" . [:pick $dateToPick 7 11] . "." . \     :set fileName ( $outInt . "-" . [:pick $dateToPick 7 11] . "." . \
     ( $monthToNum -> [:pick $dateToPick 0 3] ) . "-" . ( $logFileNum -> "$outInt" ) );     ( $monthToNum -> [:pick $dateToPick 0 3] ) . "-" . ( $logFileNum -> "$outInt" ) );
Строка 289: Строка 293:
           :log error ("$noFile");           :log error ("$noFile");
           :error "$noFile"; }           :error "$noFile"; }
-        }+        }</code>
  
-  :if ( $receivedPing < $stableConnectFrom ) do={ :set warnLevel "!"; }+Проверяем насколько удачным было тестирование канала, если плохо, ставим пометку.
  
-  /file {+<code>  :if ( $receivedPing < $stableConnectFrom ) do={ :set warnLevel "!"; }</code> 
 + 
 +Читаем из файла данные, добавляем с новой строки новые и пишем все обратно. Если ошибка, создаем файл. 
 + 
 +<code>  /file {
     :do { :set contentsFile [ get "isp-stat/$fileName.txt" contents ]; } on-error={     :do { :set contentsFile [ get "isp-stat/$fileName.txt" contents ]; } on-error={
       /system routerboard print file="isp-stat/$fileName";       /system routerboard print file="isp-stat/$fileName";
Строка 303: Строка 311:
     contents="$contentsFile\r\n$outInt;$warnLevel;$dateToLog;$timeToLog;$receivedPing;$totalPing;$stableConnectFrom;$startMode";     contents="$contentsFile\r\n$outInt;$warnLevel;$dateToLog;$timeToLog;$receivedPing;$totalPing;$stableConnectFrom;$startMode";
   }   }
-}+}</code>
  
-# Example +=== Пример использования ===
-+
-# $ ispLogging outInt=("InterfaceName"|$ether1) [receivedPing=($ping|integer)] [totalPing=($ping|integer)] [startMode=(script|sms|manual|"any-text")] newFileAt=(day|month);+
  
-+//Квадратные скобки указывают на необязательность соответствующих переменных или значений, а круглые скобки указывают на выбор одного из вариантов.//
-# Initialization of SMS reception and test sending +
-#+
  
-:if ( $varOnly = "yes" ) do={+<code># $ ispLogging outInt=("InterfaceName"|$ether1) [receivedPing=($rPing|integer)] [totalPing=($tPing|integer)] [startMode=(script|sms|manual|"any-text")] newFileAt=(day|month);</code> 
 + 
 +Переменные ''outInt'' и ''newFileAt'' являются обязательными. 
 + 
 +=== Пример лог-файла === 
 + 
 +<file>Interface;Warning;Date;Time;Received;Total;Level;Mode 
 +In-MTS-0;;01.09.2020;09:09:28;8;8;6;test-modem-scheduler 
 +In-MTS-0;;01.09.2020;21:09:29;6;8;6;test-modem-scheduler 
 +In-MTS-0;;02.09.2020;09:09:28;8;8;6;test-modem-scheduler 
 +In-MTS-0;;02.09.2020;21:09:28;8;8;6;test-modem-scheduler 
 +In-MTS-0;;03.09.2020;09:09:28;8;8;6;test-modem-scheduler</file> 
 + 
 +==== Инициализация приема SMS и тестовая отправка ==== 
 + 
 +Если переменная в начале скрипта раскомментирована, просто пишем в лог об этом и отправляем Email. В противном случае включаем прием SMS и сразу отправляем тестовую. Если ошибка, то пишем об этом Email. 
 + 
 +<code>:if ( $varOnly = "yes" ) do={
   :local varOnlySubj "SMS reception is off!";   :local varOnlySubj "SMS reception is off!";
   :local varOnlyMsg "Initialization script has been executed, but the SMS reception enable section is off!";   :local varOnlyMsg "Initialization script has been executed, but the SMS reception enable section is off!";
Строка 336: Строка 357:
  
     :execute "startup-music";     :execute "startup-music";
-}+}</code>
  
-===== Код для импорта =====+Последней строчкой включаем победную музыку, оповещающую серверную об удачном старте. 8-)
  
-<file rsc variables-initialization.rsc>+===== Код для импорта =====
  
 +<file rsc variables-initialization.rsc>/system script
 add comment="\C8\ED\E8\F6\E8\E0\EB\E8\E7\E0\F6\E8\FF \E3\EB\EE\E1\E0\EB\FC\ED\ add comment="\C8\ED\E8\F6\E8\E0\EB\E8\E7\E0\F6\E8\FF \E3\EB\EE\E1\E0\EB\FC\ED\
     \FB\F5 \EF\E5\F0\E5\EC\E5\ED\ED\FB\F5 \E8 SMS \EF\EE\F1\EB\E5 \EF\E5\F0\E5\     \FB\F5 \EF\E5\F0\E5\EC\E5\ED\ED\FB\F5 \E8 SMS \EF\EE\F1\EB\E5 \EF\E5\F0\E5\
Строка 652: Строка 674:
     \n}\r\     \n}\r\
     \n\r\     \n\r\
-    \n# With love from Vladivostok."+    \n# With love from Vladivostok."</file> 
 + 
 +===== Запуск скрипта ===== 
 + 
 +Скрипт должен выполняться при запуске устройства и при внесении в него изменений. Параметры запуска смотрите в соответствующем [[mikrotik:rb3011uias:routeros:system:scheduler|разделе]]. 
 + 
 +==== Политики запуска ==== 
 + 
 +Это минимально необходимый набор для работы скрипта.
  
-</file>+  * read, 
 +  * write, 
 +  * policy, 
 +  * test, 
 +  * sensitive.
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)