[Canberra-pm] How to exit a hung pipe to a shell command [SEC=UNCLASSIFIED]

John.Hockaday at ga.gov.au John.Hockaday at ga.gov.au
Wed Nov 28 14:46:18 PST 2007


Hi All,

I managed to get my script working.  I used Net::Ping to connect to the
zservers on the zserver port using TCP.  Here are the few lines that fixed my
problem.  It's so simple! ;--)

    use Net::Ping;
...
    my ($p) = Net::Ping->new("tcp", 60);
    $p->{port_num} = $port;	# Old version of Net::Ping?

    ++$badcount if (!$p->ping($host));
...

If the number of $badcount >= $number_servers then the ISP connection is
probably down.

Thanks to you all.


John 

> -----Original Message-----
> From: canberra-pm-bounces+john.hockaday=ga.gov.au at pm.org 
> [mailto:canberra-pm-bounces+john.hockaday=ga.gov.au at pm.org] 
> On Behalf Of Hockaday John
> Sent: Wednesday, 28 November 2007 11:03 AM
> To: kim at holburn.net; jepri at alphacomplex.org
> Cc: canberra-pm at pm.org
> Subject: Re: [Canberra-pm] How to exit a hung pipe to a shell 
> command[SEC=UNCLASSIFIED]
> 
> 
> Hi,
> 
> Thank you all for your responses. :--)  I love these lists.  
> They are so much
> better than vendor support or maintenance contracts.  ;--)
> 
> I actually do use Net::Z3950 in the rest of the script but I 
> didn't include
> it in the part of the code that I sent to this list.  The 
> rest of my code
> (>1000 lines) uses that package to do many test on the 
> zservers, download the
> data and then I validate the data using another XML package.  
> I didn't think
> that this list would like to see all that bit.  Especially in 
> an email.  ;--)
> 
> It's funny that I tried the exact code that Jepri mentioned 
> but I still got a
> hang.  IE.
> 
> 	while (($results = <ZPING>) || (sleep(60) != 60) )
> 
> I *think* that problem is that ZPING doesn't fail it just 
> waits for a very
> long time until the firewall or router sends back a message 
> that you can't
> connect.
> 
> My problem is testing to see if I can get to the internet to 
> see if it is our
> problem, such as our ISP connection to the internet being 
> down, rather than
> some of the zservers being down.  I use to use PING to test 
> access to the
> external world but our ISP blocked this in their firewall.  
> It *was* the
> easiest solution.  If pinging two external gateways failed 
> then it is our
> problem and so I didn't try to connect to the other 27 zservers.
> 
> However, I like the fact that Net::Ping can use TCP and not 
> ICMP (or UDP?).
> I think I will try this package to ping the zservers using 
> TCP and their
> zserver port.  Z3950 is based on TCP so hopefully this should 
> work.  I'll let
> you know how I go.
> 
> Thank you all for your very, very helpful responses.
> 
> 
> John
> 
> > -----Original Message-----
> > From: Kim Holburn [mailto:kim at holburn.net] 
> > Sent: Wednesday, 28 November 2007 8:22 AM
> > To: Jepri
> > Cc: Hockaday John; canberra-pm at pm.org
> > Subject: Re: [Canberra-pm] How to exit a hung pipe to a shell 
> > command [SEC=UNCLASSIFIED]
> > 
> > 
> > Net::Ping doesn't only work with ICMP.  It can use TCP and 
> > UDP as well.
> > 
> > It would be better in this case to try a TCP connection to 
> the port  
> > rather than ICMP.  ICMP will tell you if the host is reachable by  
> > ICMP packets.  a net::ping to the port will tell you if the 
> port is  
> > open.
> > 
> > On 2007/Nov/27, at 10:04 PM, Jepri wrote:
> > 
> > > Z39.50 is an ancient protocol used to access library 
> catalogues.   
> > > It has nothing to do with ICMP.
> > >
> > > http://en.wikipedia.org/wiki/Z39.50
> > >
> > > There are more things on heaven and earth, horatio, than 
> > are dreamt  
> > > of in your philosphy ;)
> > >
> > >
> > > Kim Holburn wrote:
> > >> Have you tried CPAN Net::Ping?  Why not do it all in perl?
> > >> Kim
> > >> On 2007/Nov/16, at 4:48 AM, <John.Hockaday at ga.gov.au>   
> > >> <John.Hockaday at ga.gov.au> wrote:
> > >>> Hi All,
> > >>>
> > >>> I have a PERL pipe that calls a c++ binary called
> > >>> "/public/data/asddgate/isite/current/bin/zping".  It tries to  
> > >>> ping an
> > >>> external zserver using the hostname and port parameters.  
> > If the   
> > >>> ping works
> > >>> it returns something like:
> > >>>
> > >>> Z39.50 server at www.ga.gov.au on port 6668 is alive.
> > >>>
> > >>>  and then exits the pipe.
> > >>>
> > >>> Sometimes it can't zping because the zserver is down or the  
> > >>> zping  command is
> > >>> not allowed through a firewall so the pipe hangs for 
> 224 seconds.
> > >>>
> > >>> There is an option of -t NN which sets how long to wait for a   
> > >>> response from
> > >>> the zserver and I set this to 60 seconds (zping -t 60) 
> but this   
> > >>> doesn't seem
> > >>> to work when the pipe hangs.
> > >>>
> > >>> I have tried to overcome this by using a combination of PERL  
> > >>> while  and sleep
> > >>> but I just can't seem to get it to work.  Here is a snippet of  
> > >>> my  code:
> > >>>
> > >>> 
> #################################################################
> > >>> #!/opt/csw/bin/perl
> > >>> ###################
> > >>> # sleep for 60 seconds or zping
> > >>> ###################
> > >>>   $hostname = shift;
> > >>>   $port = shift;
> > >>>
> > >>>   $zping_cmd = '/public/data/asddgate/isite/current/bin/zping';
> > >>>   my ($alive);
> > >>>
> > >>>   open (ZPING, "$zping_cmd -t 60 $hostname $port 2>&1 |")
> > >>>     or die "Cannot open zping: $!";
> > >>>   while (($results = <ZPING>) || (sleep(60) != 60) ) {
> > >>>     print "$results\n";
> > >>>     if ($results =~ m/is alive/) {
> > >>>       $alive = 1;
> > >>>       print "$results\n";
> > >>>       last;
> > >>>     }
> > >>>   }
> > >>>   print "closing ZPING and alive = $alive\n";
> > >>>   close ZPING;
> > >>> 
> #################################################################
> > >>>
> > >>> Am I doing this correctly or is there some other way to break  
> > >>> this  pipe after
> > >>> waiting for a set time and still continue with the code?  I  
> > >>> tried  alarm but
> > >>> it exits the script and I want to keep on processing.
> > >>>
> > >>> Thanks.
> > >>>
> > >>>
> > >>>  John Hockaday
> > >>>  Geoscience Australia
> > >>>  GPO Box 378
> > >>>  Canberra ACT 2601
> > >>>  (02) 6249 9735
> > >>>  http://www.ga.gov.au/
> > >>>  john.hockaday\@ga.gov.au
> > >>> _______________________________________________
> > >>> Canberra-pm mailing list
> > >>> Canberra-pm at pm.org
> > >>> http://mail.pm.org/mailman/listinfo/canberra-pm
> > >> --
> > >> Kim Holburn
> > >> IT Network & Security Consultant
> > >> Ph: +39 06 855 4294  M: +39 3494957443
> > >> mailto:kim at holburn.net  aim://kimholburn
> > >> skype://kholburn - PGP Public Key on request
> > >> Democracy imposed from without is the severest form of tyranny.
> > >>                            -- Lloyd Biggle, Jr. Analog, Apr 1961
> > >> _______________________________________________
> > >> Canberra-pm mailing list
> > >> Canberra-pm at pm.org
> > >> http://mail.pm.org/mailman/listinfo/canberra-pm
> > 
> > --
> > Kim Holburn
> > IT Network & Security Consultant
> > Ph: +39 06 855 4294  M: +39 3494957443
> > mailto:kim at holburn.net  aim://kimholburn
> > skype://kholburn - PGP Public Key on request
> > 
> > Democracy imposed from without is the severest form of tyranny.
> >                            -- Lloyd Biggle, Jr. Analog, Apr 1961
> > 
> > 
> > 
> > 
> _______________________________________________
> Canberra-pm mailing list
> Canberra-pm at pm.org
> http://mail.pm.org/mailman/listinfo/canberra-pm
> 


More information about the Canberra-pm mailing list