ошибка чтения eof соответствия шаблону для соединения telnet с использованием Perl

Я пытаюсь открыть telnet-соединение, выполнить какую-то команду и разорвать соединение. Мне нужно, чтобы он работал около 1000 раз. Скрипт работает нормально для некоторого количества попыток [скажем, около 23-25]. Затем я получаю следующую ошибку:

"шаблон соответствует чтению eof в строке 23 perlscript.pl"

Строка 23 соответствует коду

$tn->waitfor('/Password: /i').

После этой ошибки, если я пытаюсь открыть telnet-соединение вручную, я получаю сообщение об ошибке:

"Обслуживание и очередь заполнены. Пожалуйста, зайдите позже"

Я думаю, я получаю эту первую ошибку «шаблон соответствует прочтению eof», потому что соединение telnet прерывается из-за ошибки «Служба и очередь заполнены».

Я пытался больше отладить проблему, и когда я проверил журналы, я наткнулся на эту ошибку:

2012 08 08 10:27:46 EDT: Exception occured:
java.lang.NullPointerException
at dtw.telnetd.net.Connection.close(Connection.java)
at dtw.telnetd.net.ConnectionManager.cleanupBroken(ConnectionManager.java)
at dtw.telnetd.net.ConnectionManager.run(ConnectionManager.java)

Любая идея о том, что может быть причиной этого исключения?


person r9891    schedule 08.08.2012    source источник
comment
Мой первый совет — проверить логи на сервере. Во-вторых, я должен убедиться, что ваш сценарий Perl делает правильно закрывает соединения (т. е. отправляет правильный выход из системы и т. д.).   -  person Some programmer dude    schedule 08.08.2012
comment
Я использую команду $tn->close();, чтобы закрыть соединение. Я использовал команду sleep 1 после выполнения каждой команды, чтобы предыдущая команда получила достаточно времени для завершения. Я не уверен, какие журналы я могу проверить на сервере. Не могли бы вы сказать мне...   -  person r9891    schedule 08.08.2012
comment
Перед закрытием соединения вам, вероятно, следует отправить команду выхода из системы. Это заставит сервер закрыть соединение. Журнал, который вы должны проверить, вероятно, является системным журналом, и его можно найти в /var/log/ на сервере, в виде файла syslog или messages или чего-то подобного.   -  person Some programmer dude    schedule 08.08.2012
comment
Я использовал $tn->cmd("logout");, но получил ошибку. Поэтому я использовал $tn->cmd("exit");, но безрезультатно. Я получил ту же ошибку, что и Eof чтения шаблона. Я проверил файл журнала, и он выглядит нормально. Я просто запускаю скрипт снова. Он запускался 1230 раз, прежде чем остановился. Я не уверен, что происходит не так!   -  person r9891    schedule 08.08.2012
comment
stackoverflow.com/questions/12596014/ аналогично проблема. Еще не решен. Какие-либо предложения?   -  person Ram    schedule 19.12.2012


Ответы (1)


#!/usr/bin/perl

($user,$pass)=@ARGV;
use Data::Dumper;
%resp=();
use Net::Telnet ();
for (0..100) {
$tn=new Net::Telnet(Timeout=>10, prompt=>'/jamie\@jenks:~\$/');
$tn->open("jenks");
$tn->login($user,$pass);
@lines=$tn->cmd("uname -a");
$resp{$lines[0]}++;
$tn->prompt("//");
@bye=$tn->cmd("logout");
}

print Dumper(\%resp);

Кажется, это работает для меня, устанавливая подсказку в нулевую строку до того, как будет выдана команда выхода из системы.

person Vorsprung    schedule 01.04.2013