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

Jepri jepri at alphacomplex.org
Tue Nov 27 13:04:08 PST 2007


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


More information about the Canberra-pm mailing list