ログに特定のテキストが表示されたときにログに従い、コマンドを実行する最良の方法

ログに特定のテキストが表示されたときにログに従い、コマンドを実行する最良の方法

サーバーログがあり、サーバーが起動すると、ログファイルに特定のテキスト行が出力されます。サーバーの起動後にコマンドを実行したいので、次のようにします。

tail -f /path/to/serverLog | grep "server is up" ...(now, e.g., wget on server)?

これを行う最良の方法は何ですか?

ベストアンサー1

簡単な方法は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") }'

はい、どちらもカーネルログの実際のメッセージです。 Perlを使用すると、よりエレガントになり、テールの必要性を置き換えることができます。 Perlを使用すると、次のようになります。

open(my $fd, "<", "/path/to/serverLog") or die "Can't open log";
while(1) {
    if(eof $fd) {
        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");
    }
}

おすすめ記事