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

Kim Holburn kim at holburn.net
Tue Nov 27 12:49:59 PST 2007


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





More information about the Canberra-pm mailing list