грешка при четене на съвпадение на образец за telnet връзка с помощта на Perl

Опитвам се да отворя telnet връзка, да изпълня някаква команда и да прекратя връзката. Имам нужда от него, за да тичам около 1000 пъти. Скриптът работи добре за известен брой опити [да кажем около 23 - 25]. След това получавам следната грешка:

"съвпадение на образец, прочетено eof в perlscript.pl, ред 23"

Ред 23 съответства на кода

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

След тази грешка, ако се опитам да отворя ръчно telnet връзката, получавам грешка:

Услугата и опашката са пълни. Моля, върнете се по-късно

Предполагам, че получавам тази първа грешка "pattern match read eof", защото telnet връзката се прекъсва поради грешката "Service and queue are full".

Опитвах се да отстраня повече грешки в проблема и когато проверих регистрационните файлове, попаднах на тази грешка:

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");, но без резултат. Получих същата грешка Pattern match read 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