Jump to content

Автоматический ребут BDCOM P3310B.


Recommended Posts

Данный скрипт ребутит голову BDCOM P3310B, через телнет .

Можно писать мониторинг и ребутить голову по событию, например отваливание фабрики коммутации GPON.

#! /usr/local/bin/php
<?php
$username = "admin"; # Поставить свой логин головы
$password = "admin"; # Поставить свой пароль головы
$ip = "192.168.0.1"; # Поставить свой IP головы
$con = pfsockopen($ip, 23, $errno, $errstr, 10);
$login = $username."\r\n";
    fwrite($con, $login); # Логин
    $pass = $password."\r\n";
    fwrite($con, $pass);  # Пароль
    $command = "enable\r\n";  # Поднимаем права
    sleep(1);
    fwrite($con, $command);
    sleep(1);
    fwrite($con,"\r\n");
    sleep(2);
    fwrite($con, "reboot\r\n"); # Команда - reboot
    sleep(2);
    fwrite($con, "y\r\n"); # Подтверждение - y
sleep(2);
$out = fread($con, 16536);
$out = end(explode(' -----', $out));
$arr_out = explode("\n", $out);
while (trim(array_pop($arr_out)) == "--More--") {
 fwrite($con, chr(32));
     sleep(2);
     $arr_tmp = explode("\r\n", fread($con, 16536));
     $arr_out = array_merge($arr_out,$arr_tmp);
     }
fclose($con);
?>

Благодарности dan_aspire, Kycherr, натыкайте им плюсов в репу.

Edited by pavlabor
Link to post
Share on other sites

ребутнуть - не проблема.

 

по каким признакам автоматически можно узнать, что отсох пон чип (а не, к примеру, оптику рубанули)? у кого есть на стенде?

 

у нас - пока головы не таращило, но подпереть бы костыликом не помешало на всякий.

Link to post
Share on other sites

ребутнуть - не проблема.

 

по каким признакам автоматически можно узнать, что отсох пон чип (а не, к примеру, оптику рубанули)? у кого есть на стенде?

 

у нас - пока головы не таращило, но подпереть бы костыликом не помешало на всякий.

присоединяюсь, у меня периодически отваливается, могу протестить, только тоже интересует по каким признакам скрипт знает что чип отвалился?

Edited by revomix
Link to post
Share on other sites

ребутнуть - не проблема.

 

по каким признакам автоматически можно узнать, что отсох пон чип (а не, к примеру, оптику рубанули)? у кого есть на стенде?

 

у нас - пока головы не таращило, но подпереть бы костыликом не помешало на всяки

 

Когда падает чип , sh int epon выдает ошибку а не состояние интерфейса

Link to post
Share on other sites

sh int epon0/1
^
Parameter invalid

 

вместо :

 

 

sh int epon0/1
EPON0/1 is administratively down, line protocol is down
Ifindex is 8, unique port number is 7
Hardware is GigaEthernet-PON, address is fcfa.f999.1cdc (bia fcfa.f999.1cdc)
MTU 1500 bytes, BW 100000 kbit, DLY 2000 usec
Encapsulation ARPA
Full-duplex, 1000Mb/s
flow-control off
5 minutes input rate 0 bits/sec, 0 packets/sec
5 minutes output rate 0 bits/sec, 0 packets/sec
Received 0 packets, 0 bytes
0 broadcasts, 0 multicasts
0 discard, 0 error, 0 PAUSE
0 align, 0 FCS, 0 symbol
0 carriersense
Transmited 0 packets, 0 bytes
0 broadcasts, 0 multicasts
0 discard, 0 error, 0 PAUSE
0 sqettest, 0 deferred
0 single, 0 multiple, 0 excessive, 0 late

Edited by Ajar
Link to post
Share on other sites

Пингуем голову, если голова ответила,

мониторим три маркера, желательно по разным направлениям

если первый маркер ответил - отбой, нет,

проверянем второй, да - отбой, нет,

проверяем третий, да - отбой, нет,

Считываем количество онух на наименее нагруженной поне, EPON0/1, считалось - отбой, нет,

ребутим голову и делаем запись в логе, можно письмо админу отправлять.

 

В кроне

*/1   *   *   *   *   root   /путь к скрипту/reboot.php > /dev/null 2>&1

 

сам скрипт - reboot.php

перед запуском, рскоментарьте секцию тест, погоняйте, отчеты можно получить раскоментарив соответствующие строки

#! /usr/local/bin/php
<?php
# Скрипт перегружает голову, в результате неудачного пинггования трех контрольных узлов и опроса головы.
$username = "xxxx";
$password = "xxxx";
$ipPon = "172.16.0.x";
$ipTest1 = "172.16.x.23";  # Сливовая-Виноградная
$ipTest2 = "172.16.x.135"; # Лысого-Кучерявого
$ipTest3 = "172.16.x.20";  # ул.-пер. Грибоедова
$arr_count = 30; # на модуле EPON0/1, должно висеть не менее 5 онух, если меньше скорректируйте по отчету print_r($arr_out);
# test, раскоментарить, в течении минуты, в кроне должен быть отчет о времениперегрузки головы,
# если все окей, закоментировать обратно
#$ipTest1 = "172.16.118.10"; #  23 Котляревского-Лохвицкая
#$ipTest2 = "172.16.118.10"; # 135 Лысенка-Островского
#$ipTest3 = "172.16.118.10"; #  20 ул.-пер. Чайковского
#$arr_count = 300;
$reboot = 1;

$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipPon." | grep from";
unset($scr_count);
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
if ($scr_count[3]) {
$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest1." | grep from";
#echo $unix_nmap;
unset($scr_count);
#echo `$unix_nmap`;
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
#echo sizeof($scr_count)."\r\n";
if ($scr_count[3]!=$ipTest1.":") {
$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest2." | grep from";
#echo $unix_nmap;
unset($scr_count);
#echo `$unix_nmap`;
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
#echo sizeof($scr_count)."\r\n";
 if ($scr_count[3]!=$ipTest2.":") {
 $unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest3." | grep from";
#echo $unix_nmap;
 unset($scr_count);
#echo `$unix_nmap`;
 $scr_count = explode(" ",`$unix_nmap`);
# print_r($scr_count);
# echo sizeof($scr_count)."\r\n";
  if ($scr_count[3]!=$ipTest3.":") {
   $con = pfsockopen($ipPon, 23, $errno, $errstr, 10);
   $login = $username."\r\n";
    fwrite($con, $login);
    $pass = $password."\r\n";
    fwrite($con, $pass);
    $command = "enable\r\n";
    sleep(1);
    fwrite($con, $command);
    sleep(1);
    fwrite($con,"\r\n");
    sleep(2);
    fwrite($con, "show running-config interface EPON0/1\r\n"); # Контрольный отчет с модуля пон, как контроль что пон работает.
#    fwrite($con, "show running-config interface epon0/1:34\r\n");
    sleep(2);
    $out = fread($con, 16536);
    $out = end(explode(' -----', $out));
    $arr_out = explode("\n", $out);
    while (trim(array_pop($arr_out)) == "--More--") {
     fwrite($con, chr(32));
     sleep(2);
     $arr_tmp = explode("\r\n", fread($con, 16536));
     $arr_out = array_merge($arr_out,$arr_tmp);
    }
fclose($con);
#print_r($arr_out);
if (sizeof($arr_out)>$arr_count) $reboot = 0;
  } else $reboot = 0;
 } else $reboot = 0;
} else $reboot = 0;
#echo $reboot."\r\n";

if ($reboot) {
 $con = pfsockopen($ipPon, 23, $errno, $errstr, 10);
 $login = $username."\r\n";
    fwrite($con, $login);
    $pass = $password."\r\n";
    fwrite($con, $pass);
    $command = "enable\r\n";
    sleep(1);
    fwrite($con, $command);
    sleep(1);
    fwrite($con,"\r\n");
    sleep(2);
    fwrite($con, "reboot\r\n");
    sleep(2);
    fwrite($con, "y\r\n");
 fclose($con);

  $foCD=fopen("/var/log/rebootPon.log","a+");
   fwrite($foCD, date("y.m.d H:i:s")."\treboot\n");
  fclose($foCD);
 }
}
?>

Должно работать под любой осью.

Edited by pavlabor
Link to post
Share on other sites

 

 

Когда падает чип , sh int epon выдает ошибку а не состояние интерфейса

 

а по снмп что в интерфейсах при этом?

Link to post
Share on other sites

sleep в конструкции не радует, всё таки связка expect-a лучше должна отрабатывать по идее, и если у железки CPU загружен - она может отвечать дольше чем секунду.

правда expect под пхп идет отдельными пакетами PECL.

ИМХО лучше бы вышло через консольный expect или perl/python


 

Когда падает чип , sh int epon выдает ошибку а не состояние интерфейса

 

а по снмп что в интерфейсах при этом?

 

кстати хорошее замечание, может достаточно распарсить IfDescr какой-нить

Link to post
Share on other sites

я бы смтптрапом ловил , тогда ребут головы будет мгновенный. Настроил голову , жду ... пока скриптом лью все в файл

Link to post
Share on other sites

я бы смтптрапом ловил , тогда ребут головы будет мгновенный. Настроил голову , жду ... пока скриптом лью все в файл

помоему там не происходит события linkdown, там просто загадочным образом они ЕПОН порты исчезают из системы до ребута

но если таки происходит - будете спасителем человечества  бдкомо-водов :D

Edited by l1ght
Link to post
Share on other sites

 

я бы смтптрапом ловил , тогда ребут головы будет мгновенный. Настроил голову , жду ... пока скриптом лью все в файл

помоему там не происходит события linkdown, там просто загадочным образом они ЕПОН порты исчезают из системы до ребута

но если таки происходит - будете спасителем человечества  бдкомо-водов :D

 

точно , просто  пропадают интерфейсы epon

Link to post
Share on other sites

sleep в конструкции не радует, всё таки связка expect-a лучше должна отрабатывать по идее, и если у железки CPU загружен - она может отвечать дольше чем секунду.

правда expect под пхп идет отдельными пакетами PECL.

ИМХО лучше бы вышло через консольный expect или perl/python

 

Когда падает чип , sh int epon выдает ошибку а не состояние интерфейса

 

а по снмп что в интерфейсах при этом?

 

кстати хорошее замечание, может достаточно распарсить IfDescr какой-нить

 

С IfDescr, безусловно быстрее, тогда код получим такой вид,

если OID для ребута ОЛТа заработает, можно вообще обойтись средствами php.

#! /usr/local/bin/php
<?php
# Скрипт перегружает голову, в результате неудачного пинггования трех контрольных узлов и опроса головы.
$username = "xxxx";
$password = "xxxx";
$ipPon = "172.16.0.x";
$ipTest1 = "172.16.x.23";  # Сливовая-Виноградная
$ipTest2 = "172.16.x.135"; # Лысого-Кучерявого
$ipTest3 = "172.16.x.20";  # ул.-пер. Грибоедова
$arr_count = 30; # на модуле EPON0/1, должно висеть не менее 5 онух, если меньше скорректируйте по отчету print_r($arr_out);
# test, раскоментарить, в течении минуты, в кроне должен быть отчет о времениперегрузки головы,
# если все окей, закоментировать обратно
#$ipTest1 = "172.16.118.10"; #  23 Котляревского-Лохвицкая
#$ipTest2 = "172.16.118.10"; # 135 Лысенка-Островского
#$ipTest3 = "172.16.118.10"; #  20 ул.-пер. Чайковского
#$arr_count = 300;
$reboot = 1;

$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipPon." | grep from";
unset($scr_count);
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
if ($scr_count[3]) {
$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest1." | grep from";
#echo $unix_nmap;
unset($scr_count);
#echo `$unix_nmap`;
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
#echo sizeof($scr_count)."\r\n";
if ($scr_count[3]!=$ipTest1.":") {
$unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest2." | grep from";
#echo $unix_nmap;
unset($scr_count);
#echo `$unix_nmap`;
$scr_count = explode(" ",`$unix_nmap`);
#print_r($scr_count);
#echo sizeof($scr_count)."\r\n";
 if ($scr_count[3]!=$ipTest2.":") {
 $unix_nmap = "ping -t 1 -c 1 -s 16 ".$ipTest3." | grep from";
#echo $unix_nmap;
 unset($scr_count);
#echo `$unix_nmap`;
 $scr_count = explode(" ",`$unix_nmap`);
# print_r($scr_count);
# echo sizeof($scr_count)."\r\n";
  if ($scr_count[3]!=$ipTest3.":") {
/*   $con = pfsockopen($ipPon, 23, $errno, $errstr, 10);
   $login = $username."\r\n";
    fwrite($con, $login);
    $pass = $password."\r\n";
    fwrite($con, $pass);
    $command = "enable\r\n";
    sleep(1);
    fwrite($con, $command);
    sleep(1);
    fwrite($con,"\r\n");
    sleep(2);
    fwrite($con, "show running-config interface EPON0/1\r\n"); # Контрольный отчет с модуля пон, как контроль что пон работает.
#    fwrite($con, "show running-config interface epon0/1:34\r\n");
    sleep(2);
    $out = fread($con, 16536);
    $out = end(explode(' -----', $out));
    $arr_out = explode("\n", $out);
    while (trim(array_pop($arr_out)) == "--More--") {
     fwrite($con, chr(32));
     sleep(2);
     $arr_tmp = explode("\r\n", fread($con, 16536));
     $arr_out = array_merge($arr_out,$arr_tmp);
    }
fclose($con);
#print_r($arr_out);
if (sizeof($arr_out)>$arr_count) $reboot = 0;*/

$object_id = "ifDescr";
$community = "public";
$arr_out = snmpwalk($ipPon, $community, $object_id);
#print_r($arr_out);
if (sizeof($arr_out)>15) $reboot = 0; # Параметр 15, учитывает наличие не менее пяти ОНУ-х на голове, если больше то нечего, если меньше, параметр нужно скорректировать!
  } else $reboot = 0;
 } else $reboot = 0;
} else $reboot = 0;
#echo $reboot."\r\n";

if ($reboot) {
# OID для ребута ОЛТа, не курицца, если сработает, то скрипт можно подправить так
/* $con = pfsockopen($ipPon, 23, $errno, $errstr, 10);
 $login = $username."\r\n";
    fwrite($con, $login);
    $pass = $password."\r\n";
    fwrite($con, $pass);
    $command = "enable\r\n";
    sleep(1);
    fwrite($con, $command);
    sleep(1);
    fwrite($con,"\r\n");
    sleep(2);
    fwrite($con, "reboot\r\n");
    sleep(2);
    fwrite($con, "y\r\n");
 fclose($con); */
$community = "public";
$object_id = "1.3.6.1.4.1.3320.9.184.7";
snmpset($ip, $community, $object_id,'i',0);

  $foCD=fopen("/var/log/rebootPon.log","a+");
   fwrite($foCD, date("y.m.d H:i:s")."\treboot\n");
  fclose($foCD);
 }
}
?>
Edited by pavlabor
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Haddy
      В последнее время столкнулись с проблемой в перекосе сигнала от онушки на голову. 
      Голова: ЗТЕ с610 на С++ модулях, онушки фоксгейт и пикотел.
      Проблема такая: Голова светит свои +6-7, Пикотел светит 1.5-2. Фоксгейт +3-4.
      Расчётный сигнал и фактический от головы к клиенту +- совпадают. Но от онушки до головы где-то теряются 1-2дб. К примеру:  (Онушка пикотел, на отл сигнал приходит на 1дб хуже)
      Магистральные делители все варим, конечные - когда как, чаще всего ставим корпусные упц 1х8, редко бывают оконечки 1х8\1х12\1х16.
      Грешили на корпусные. Начали тестит, вместо них подкидываем оконечку или другой корпусный - проблема сохраняется. Измеряли рефом - волокно отличное, без перекосов и лишних событий.
      Один тест вовсе смутил: в дом приходит порт его делим 1х16 оконеченным, на каждый выход ставим 1х8 - перекос есть. Меняли приходящее волокно (благо их там 24, было куда потыкать) - эффект тот же. Начали менять 1х8 на разные варианты - перекос сохраняется. 
      Закинули онушку на порт без делителей - всё отлично, перекоса нет. Порт, на него 1х16 и онушка - всё отлично, перекоса нет (пробовали разные выходы на 1х16). Заменили 1х16 на другой 1х16 - перекоса нет. Добавили 1х8 (пробовали и корпусный и оконеченный) - перекос в 2 дб вернулся.
      Сейчас бригады переводят другой дом и приколов он внёс ещё больше: один порт на весь дом, в разных местах стоят 1х16 корпусный, но на одном перекос в 2 дб есть, а на втором: перекос 0.4 на одном абоне, 0.5 на другом.
      Волокна максимум 6 км от головы до первого делителя. Если брать волокно в 5 км: перекос в 0.4-0.5дб между 1310 и 1490 - премлимо, как книжка пишет, но откуда этот 1 дб дополнительно вылезает...
      Кто-то сталкивался с таким? Если да, нашли в чём проблема?
    • By x-net
      Продам вживаний EPON OLT C-Data (Stels) FD1208S-R2-DAP + DAC 1m + 8 EPON SFP, вуха та рідна коробка. Прошу 20 тис. 
    • By LazukinIvan
      🔌 Продаємо абонентські термінали ONU HSGQ (EPON/GPON) — універсальні, стабільні, перевірені! 🔥
      Шукаєте доступне рішення для побудови FTTB/FTTH мережі?
      ONU HSGQ — це надійний клієнтський термінал, який працює як з EPON, так і з GPON. Показав стабільну роботу на багатьох OLT!
      📦 Основні характеристики:
      Підтримка стандартів: EPON / GPON
      Порт: 1x RJ45 10/100/1000 Mbps
      Оптичний роз’єм: SC/UPC
      Ідеально підходить для побудови мережі FTTB або FTTH
      💰 Ціна:
      400 грн/шт
      Від 10 шт — 380 грн/шт
      Від 50 шт — 375 грн/шт
      ✅ Опт і дрібний гурт
      ✅ Тестуємо перед відправкою
      ✅ Є в наявності, відвантаження в день замовлення
      📩 Пишіть у приват або залишайте заявку в коментарях — надамо всі деталі!




       
      hsgq-x100dg-43166623 (2).pdf
    • By x-net
      Продам вживані EPON OLT C-Data (Stels) FD1108S. Всі порти робочі. В одному встановлений Пролайнівський 12в ДБЖ, в іншому виведений розʼєм під Пролайнівський ДБЖ RPS Twin (2x 100W). RPS Twin також є, його другий кабель має 2-піновий розʼєм під Д-Лінк. Також маю зарядний пристрій 12в 50а під ліфепо (використовувався разом з RPS Twin). 
      Прошу 10 тис. за той, що з встановленим ДБЖ, 14тис. за комплект з зовнішнім ДБЖ та зарядним пристроєм.
    • By LazukinIvan
      Пропоную до продажу абсолютно нову OLT BDCOM GP3600-16B у заводській упаковці. Обладнання не використовувалось, з двома AC-блоками живлення.
      🔹 Кількість PON портів: 16
      🔹 UpLink: 4 × GE (SFP) + 2 × 10GE (SFP+)
      🔹 Блоки живлення: 2 × AC (нові, встановлені)
      🔹 Форм-фактор: 1U, монтаж у 19” стійку
      🔹 Стан: 100% новий
      🔹 Комплектація: Повна — OLT + 2 блоки живлення + кріплення + заводська упаковка
      💵 Ціна: 80 000 грн / шт
      💳 Можлива оплата по безналу без ПДВ + 6%


       
×
×
  • Create New...