Um jeito simples seria o awk.
tail -f /path/to/serverLog | awk '/Printer is on fire!/ { system("shutdown -h now") }
/new USB high speed/ { system("echo New USB" | mail admin")'
E sim, ambos são mensagens reais de um log do kernel. Perl pode ser um pouco mais elegante de usar para isso e também pode substituir a necessidade de cauda. Se usar perl, será algo parecido com isto:
open(my $fd, "<", "/path/to/serverLog") or die "Can't open log";
while(1) {
if(eof $dataFd) {
sleep 1;
$fd->clearerr;
next;
}
my $line = <$fd>;
chomp($line);
if($line =~ /Printer is on fire!/) {
system("shutdown -h now");
} elsif($line =~ /new USB high speed/) {
system("echo New USB" | mail admin");
}
}