[Canberra-pm] How to exit a hung pipe to a shell command [SEC=UNCLASSIFIED]
Jepri
jepri at alphacomplex.org
Tue Nov 27 09:33:42 PST 2007
Nearly forgot... there's a cpan module for z39.50. In fact, more than one:
http://search.cpan.org/search?query=z39.50&mode=all
HTH
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
More information about the Canberra-pm
mailing list