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
In reply to Detecting Timeout of piped data by sriordan
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |