Перейти до

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


pavlabor

Рекомендованные сообщения

Данный скрипт ребутит голову 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, натыкайте им плюсов в репу.

Відредаговано pavlabor
Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

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

Відредаговано revomix
Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

Відредаговано Ajar
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

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

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

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

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

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

Считываем количество онух на наименее нагруженной поне, 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);
 }
}
?>

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

Відредаговано pavlabor
Ссылка на сообщение
Поделиться на других сайтах

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

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

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


 

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

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Відредаговано l1ght
Ссылка на сообщение
Поделиться на других сайтах

 

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

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

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

 

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

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

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);
 }
}
?>
Відредаговано pavlabor
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від Hamster_Serg
      Всім привіт.
      В мене з'явилася проблема з BDCOM(tm) GP3600-16B прошивка Version 10.3.0D Build 124190.
      Проблема в наступному, що коли додаєш VLAN на порт або просто створюєш, олт бутається через 10 секунд.
      Після цього все працює стабільно і можна додавати без всяких проблем.
      Чи була в когось така проблема ?
      Дякую за відповідь
    • Від Rico3110
      ПРОДАМ НОВІ OLT
      нова C-DATA EPON FD1204S-R2-DAP - 1шт
      нова C-DATA GPON FD1604S-2AC - 1шт
       
      Блоки живлення нові EF9012 і EF6012
       

       
       
      UP!!!  По ціні, та наявності, уточнюйте в приватних повідомленнях!
       
    • Від monark
      I sell files to unlock OLT ZTE and OLT Huawei.
      Розблокуйте свої OLT самостійно, щоб прийняти будь-який ONT.
       
      OLT ZTE: C300, C320, C350
       
      OLT HUAWEI: MA5800 X2, X7, X15 and X17 all boards / всі дошки
      OLT HUAWEI: MA56XX all boards / всі дошки
       
      Unlock your OLTs yourself to accept any ONT.
      Розблокуйте свої OLT самостійно, щоб прийняти будь-який ONT.
       
       
      PVT
    • Від Prodazha
      Продам абонентські термінали Foxgate 1001mz.
      нові!
      ціна 400 грн/шт.
       
    • Від ikoko
      Вітаю !
      Куплю абонентське обладнання PON P2000-08B, P2000-16B, P2000-24B або щось аналогічне запропонуйте. 
×
×
  • Створити нове...