From: ncmudbug <jam...@em...> - 2011-02-01 00:01:55
|
Thanks, Roland. The ssh idea sounds intriguing. Maybe you can help me with it. If the command fails, I would like to know why from stderr. In my playing with it, I didn't get an error message. Is there a way around that? Jim Roland Giersig wrote: > > Your flags look fine. The log shows that no further string is received > back from the sssh connection after the echo of the command is > received. Try increasing the timeout value to 10 just to be sure that > it isn't a freak delay effect. > > Otherwise I'd work around the problem by not using Expect at all. ssh > gives you the exit() value of a remote command just fine, so use > system("ssh remotehost test -d /media/tmp") instead. ;-) > > Hope this helps, > > Roland > > > 2011/1/31 ncmudbug <jam...@em...>: >> >> This is not related to pattern matching. &run_and_expect is a subroutine >> I >> use for any command that I only care about its success or failure, not >> its >> output. It works correctly. I'm wondering if there might be some option I >> need to set... >> >> I start the program with: >> $Expect::Debug=0; >> $Expect::Exp_Internal=1; >> $Expect::Log_Stdout=0; >> ... >> then I log into the remote host and I'm off to the races. >> >> It sometimes appears that it doesn't wait for the entire timeout period >> or >> that the host doesn't execute the command but the fact that it is in the >> history, though seems to contradict that. >> >> kboragouda wrote: >>> >>> Something related to pattern matching? >>> >>> ~ >>> kb >>> >>> On Sat, Jan 29, 2011 at 5:17 AM, ncmudbug <jam...@em...> >>> wrote: >>> >>>> >>>> This is my first post. I tried searching for "timeout" but as you can >>>> imagine, the output was pretty voluminous! However, I didn't see any >>>> other >>>> questions similar to mine in the first several pages. Knowing my luck, >>>> somebody asked just the question on the page beyond where I stopped >>>> looking. >>>> >-( If so, just send me the link to the answer. >>>> I am using Perl-Expect to perform unattended tasks on a remote Linux >>>> machine. I am getting some timeout error on simple things that have a >>>> generous timeout value for it. For example, $mountpt is set to >>>> '/media/tmp'. >>>> I have the following call: >>>> >>>> $exists = &conn::run_and_expect ( $ssh, 2, "[ -d $mountpt ]" ); >>>> >>>> The code for &run_and_expect follows: >>>> >>>> sub run_and_expect >>>> { >>>> my ( $conn, $timeout, $cmd ) = @_; >>>> >>>> my $command = "$cmd >/dev/null 2> /tmp/err && echo SUCCESS || echo >>>> FAIL\n"; >>>> my $success = 0; >>>> my $got_error = 0; >>>> my $got_prompt = 0; >>>> >>>> $conn->clear_accum ( ); >>>> print $conn $command; >>>> $conn->expect ( $timeout, [ "\nSUCCESS\r\n", sub { >>>> $success = 1; >>>> exp_continue; >>>> } ], >>>> [ "\nFAIL\r\n", sub { >>>> my $ssh = shift; >>>> $success = 0; >>>> print $ssh "/bin/cat >>>> /tmp/err\n"; >>>> $ssh->expect ( 5, >>>> [ '-re', >>>> '\n.*\r\n', >>>> sub { >>>> my >>>> $error >>>> = >>>> $ssh->match ( ); >>>> chomp >>>> $error; >>>> >>>> $got_error >>>> = >>>> 1; >>>> >>>> &log::append_log ( $log::NO_ECHO, "$cmd returned with:$error" ); >>>> >>>> exp_continue; >>>> } ], >>>> [ '-re', >>>> $prompt, >>>> sub { >>>> if ( ! >>>> $got_error ) { >>>> >>>> &log::append_log ( $log::NO_ECHO, "$cmd failed" ); >>>> >>>> &log::append_log ( $log::NO_ECHO, "no error message found" ); >>>> >>>> $got_prompt = 1; >>>> } >>>> } ] >>>> ); >>>> $success = 0; >>>> exp_continue; >>>> } ], >>>> [ '-re', $prompt, sub { >>>> $success = $success; >>>> $got_prompt = 1; >>>> } ], >>>> timeout=> sub { >>>> if ( ! $got_prompt ) { >>>> &log::append_log ( >>>> $log::NO_ECHO, "we timed out running $cmd" ); >>>> $success = 0; >>>> } >>>> } >>>> ); >>>> return $success; >>>> } >>>> >>>> I am getting TIMEOUT errors: >>>> >>>> spawn id(4): Does `[ -d /media/tmp ] >/dev/null 2> /tmp/err && echo >>>> SUCCESS >>>> || echo FAIL\r\n'^M >>>> match:^M >>>> pattern #1: -re `\nSUCCESS\r\n'? No.^M >>>> pattern #2: -re `\nFAIL\r\n'? No.^M >>>> pattern #3: -re `(?-xism:# $)'? No.^M >>>> ^M >>>> Waiting for new data (2 seconds)...^M >>>> TIMEOUT^M >>>> Calling timeout function CODE(0x8655adc)...^M >>>> Returning from expect with TIMEOUT or EOF^M >>>> Starting EXPECT pattern matching...^M >>>> >>>> The machine is very lightly loaded - in fact, I am the only user logged >>>> on. >>>> The command shows up in the history of the remote machine. When I run >>>> the >>>> command by hand, it comes back instantly regardless of whether the >>>> directory >>>> is there or not (obviously, just checking for the existence of a >>>> directory >>>> is a trivial task and two seconds should be much more time than is >>>> necessary >>>> for that). Incidentally, this problem happens with other commands that >>>> should have no problem finishing during the timeout period. It seems >>>> that >>>> it >>>> doesn't make any difference what the timeout value is that sometimes, >>>> the >>>> command will still timeout regardless. >>>> >>>> Is there some way I can debug what is causing this simple command to >>>> time >>>> out? Any help would be GREATLY appreciated =). >>>> -- >>>> View this message in context: >>>> http://old.nabble.com/Debugging-timeouts-tp30790551p30790551.html >>>> Sent from the Perl - Expectperl-Discuss mailing list archive at >>>> Nabble.com. >>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! >>>> Finally, a world-class log management solution at an even better >>>> price-free! >>>> Download using promo code Free_Logger_4_Dev2Dev. Offer expires >>>> February 28th, so secure your free ArcSight Logger TODAY! >>>> http://p.sf.net/sfu/arcsight-sfd2d >>>> _______________________________________________ >>>> Expectperl-discuss mailing list >>>> Exp...@li... >>>> https://lists.sourceforge.net/lists/listinfo/expectperl-discuss >>>> >>> >>> ------------------------------------------------------------------------------ >>> Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! >>> Finally, a world-class log management solution at an even better >>> price-free! >>> Download using promo code Free_Logger_4_Dev2Dev. Offer expires >>> February 28th, so secure your free ArcSight Logger TODAY! >>> http://p.sf.net/sfu/arcsight-sfd2d >>> _______________________________________________ >>> Expectperl-discuss mailing list >>> Exp...@li... >>> https://lists.sourceforge.net/lists/listinfo/expectperl-discuss >>> >>> >> >> -- >> View this message in context: >> http://old.nabble.com/Debugging-timeouts-tp30790551p30807546.html >> Sent from the Perl - Expectperl-Discuss mailing list archive at >> Nabble.com. >> >> >> ------------------------------------------------------------------------------ >> Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! >> Finally, a world-class log management solution at an even better >> price-free! >> Download using promo code Free_Logger_4_Dev2Dev. Offer expires >> February 28th, so secure your free ArcSight Logger TODAY! >> http://p.sf.net/sfu/arcsight-sfd2d >> _______________________________________________ >> Expectperl-discuss mailing list >> Exp...@li... >> https://lists.sourceforge.net/lists/listinfo/expectperl-discuss >> > > ------------------------------------------------------------------------------ > Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! > Finally, a world-class log management solution at an even better > price-free! > Download using promo code Free_Logger_4_Dev2Dev. Offer expires > February 28th, so secure your free ArcSight Logger TODAY! > http://p.sf.net/sfu/arcsight-sfd2d > _______________________________________________ > Expectperl-discuss mailing list > Exp...@li... > https://lists.sourceforge.net/lists/listinfo/expectperl-discuss > > -- View this message in context: http://old.nabble.com/Debugging-timeouts-tp30790551p30812142.html Sent from the Perl - Expectperl-Discuss mailing list archive at Nabble.com. |