Sorry everybody, I have been trying to work on this all day but nothing...
IF a perl module uses: connect($sock, sockaddr_in($rport, $raddr)) or die "Can't connect to $ssh->{host}, port $rport: $!"; How do I catch the die() in an eval statement; I have been using: eval { alarm 10; $ssh->login($user); ($out, $error, $exit) = $ssh->cmd($cmd); alarm(0); }; # end of eval statement if ($@ =~ /Can't/) { try_again($ip, $host_name) = @_; } but the eval still doesn't pass the program to the sub try_again. Sorry for being such a newbie, but I have been trying to follow the oreilly book and still it just isn't happening. thanks, chad On Tue, 27 Aug 2002 09:28:52 -0400 Bob Showalter <[EMAIL PROTECTED]> wrote: > > -----Original Message----- > > From: Chad Kellerman [mailto:[EMAIL PROTECTED]] > > Sent: Tuesday, August 27, 2002 8:58 AM > > To: [EMAIL PROTECTED] > > Subject: Re: eval on a $SIG{KILL}- newbie question > > > > > > Bob, > > Thanks for the responce. I did not realize you can't trap a > > $SIG{kill}. > > > > I guess the only way around this is to change the perl module. > > Change it so it doesn't die but return a value and grab that value > > in the eval statement? > > Wait a minute. die() is vastly different from sending SIGKILL. If the > module simply die()'s, you catch that by examining $@ after the eval > block. > > > > > > > thanks again, > > --chad > > > > > > On Tue, 27 Aug 2002 08:41:31 -0400 > > Bob Showalter <[EMAIL PROTECTED]> wrote: > > > > > > -----Original Message----- > > > > From: Chad Kellerman [mailto:[EMAIL PROTECTED]] > > > > Sent: Tuesday, August 27, 2002 8:33 AM > > > > To: [EMAIL PROTECTED] > > > > Subject: eval on a $SIG{KILL}- newbie question > > > > > > > > > > > > Hello, > > > > I am writing a script on a linux server use Net::SSH::Perl. > > > > Every > > > > once in a while the ssh connection to a remote server dies or it > > > > just can't connect. the perl module send a $SIG{KILL} to > > the script > > > > when ever this happens. Which isn't what I want. I am trying > > > > to put the kill in an eval stattement and have it wait a few > > > > minutes before it tries to connect again. But I am never > > > > getting past the eval statement. > > > > > > > > Here's my code: > > > > > > > > eval { local $SIG{KILL} = sub {die "died" }; > > > > alarm 10; > > > > $ssh->login($user); > > > > ($out, $error, $exit) = $ssh->cmd($cmd); > > > > alarm(0); > > > > }; # end of eval statement > > > > if ($@ =~ /died/) { > > > > try_again($host_ip, $host_name, $group_dir) = @_; > > > > } > > > > > > > > It the try_again sub I have it email me (which works) but > > I have it > > > > print that it's entering the failed subroutine but it never does > > > > that. > > > > > > > > Does anyone see what I am doing wrong? Thanks again for > > > > all the help. > > > > > > Are you saying Net::SSH::Perl sends SIGKILL to the calling > > script? You > > > can't catch SIGKILL. > > > > > > If you're trying to catch the 10 second timeout, use $SIG{ALRM}. > > > > > > > -- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]