サーバーログがあり、サーバーが起動すると、ログファイルに特定のテキスト行が出力されます。サーバーの起動後にコマンドを実行したいので、次のようにします。
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");
}
}