sriordan has asked for the wisdom of the Perl Monks concerning the following question:
I have script I am trying to use to monitor the output of another script that is being piped to it by:
perl script2.pl | script1.pl
Script1.pl outputs Good CRC/Bad CRC at 1-5 hz or so. It uses Device:SerialPort to read telemetry and feed it to MySQL data but occasionally hangs and needs to reset the tied file handle to the serial port and the connection to the Db. This works fine though the control interface, but I really need to monitor it and restart it anytime telemetry stops for more than 15-20 seconds without relying on user input to reset it.
The monitoring script is along the lines of:
#!/usr/bin/perl use strict; my ($timeout, $lastGoodTime); $timeout = 20; # Timeout in seconds while(-f pid.txt) { my $inLine = <>; if ($inLine ne '') { print "$inLine\n"; if ($inLine =~ /^Done/) { print "Exiting\n"; $lastGoodTime = time; exit; } elsif (( $inLine eq '' ) && ( time > ( $lastGoodTime + $timeout )) +) { &requestRestart(); } }
To my mind the above code snippet ought to work but there appears to be something I am missing and/or not understanding about how the <> works. Any help/advice would be greatly appreciated. -Sean
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Detecting Timeout of piped data
by sierpinski (Chaplain) on Jul 31, 2011 at 03:17 UTC | |
by Anonymous Monk on Jul 31, 2011 at 04:56 UTC | |
by sriordan (Acolyte) on Jul 31, 2011 at 21:09 UTC | |
by Anonymous Monk on Aug 01, 2011 at 05:55 UTC | |
by Anonymous Monk on Aug 01, 2011 at 05:57 UTC | |
by Anonymous Monk on Aug 01, 2011 at 06:04 UTC | |
|
Re: Detecting Timeout of piped data
by zentara (Cardinal) on Jul 31, 2011 at 13:31 UTC | |
|
Re: Detecting Timeout of piped data
by Marshall (Canon) on Aug 01, 2011 at 11:47 UTC | |
by sriordan (Acolyte) on Aug 01, 2011 at 20:34 UTC | |
by Anonymous Monk on Aug 02, 2011 at 02:36 UTC | |
by Marshall (Canon) on Aug 02, 2011 at 06:57 UTC |