I'm thinking this is some kind of buffer issue and wondering if
anything can be done about it:
The script included below is really simple so I hope its not some
script error causing this.
How script is used:
System logger is setup to write everything but mail and news logs to a
named pipe:
On linux that is accomplished in syslog.conf or in my case
rsyslog.conf like this:
grep '|' /etc/rsyslog.conf
*.*;mail.none;news.none |/var/adm/pipe
Then the filter script just reads from that (named)pipe.
./sysfltr pipe
It works fine, and as you'll see below the script to both stdout in
teh form of console and to a log file.
Again... appears to work.
However the log file takes quite a long time to starting showing any
action, and then stay well behind the console output.
Here is what `wc' sees right now:
wc (lines in console saved to file) tocnt
84 922 6741 tocnt
wc /var/adm/log/pipe1.log (written from filter script)
51 562 4096 /var/adm/log/pipe1.log
That be some kind of buffer filling up, but I wondered if we have a
way to flush the buffer from the perlscript to make the file closer to
live output.
------- --------- ---=--- --------- --------
cat sysfltr
#!/usr/local/bin/perl
use strict;
use warnings;
my $ucsb = qr/ucsb/;
my $temp_thresh =qr/Temperature above Threshold/;
my $hddtemp = qr/hddtemp/;
my $logdir ='/var/adm/log';
my $logname = 'pipe1.log';
open(LOGNAME,"> $logdir/$logname")or die "Can't open $logdir/$logname: $!";
while(<>){
if (/$ucsb|$temp_thresh|$hddtemp/){
print LOGNAME $_;
print $_;
}
}
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/