Ich habe mal einen Script-Daemon zur Mail-Log Auswertung geschrieben, das über einen FIFO-Puffer lief. Das ist eine recht elegante Methode, weil man sich nur um das kümmert was gerade geschrieben wurde, und nicht das ganze File Parsen muss.
Erstmal braucht man einen FIFO-Puffer, das geht recht simpel mit:
mkfifo /var/log/kern.fifo
Diese Spezialdatei bleibt, muß also nur einmal angelegt werden. Als nächstes kümmert man sich um das füllen dieses Puffers. Ich nehme mal an du willst Kernal-Einträge. Dann erweitere die /etc/syslog.conf um die Zeile:
kern.* |/var/log/kern.fifo
Danach den syslog-Daemon neu starten. Jetzt werden alle Kernal-Nachrichten in den Puffer kopiert und können ganz normal ausgelesen werden. Ich habe das damals mit einem Perl-Daemon gemacht. Hier mal das Grundgerüst dazu:
#!/usr/bin/perl
# the buffer
our $buffer = "/var/log/kern.fifo";
# global variables/objects
our $abort = 0;
# run main
Main();
######################################################
# we care signals
sub SignalCatcher
{
$abort = 1;
}
#######################################################
# Parse FIFO
sub ParseStdin
{
open (BUFFER, $buffer);
while (<BUFFER>)
{
print $_;
if ($abort==1) {last;}
...
}
close(BUFFER);
}
#######################################################
# Main Sub
sub Main
{
$SIG{TERM} = \&SignalCatcher;
...
ParseStdin();
...
}
Display More
Diese Methode hat fast keine CPU-Last und verliert auch keine Log-Lines wenn der Daemon mal wegen Fehlern abgebrochen wurde.