Text-Processing
當日誌中出現某些文本時,跟踪日誌並執行命令的最佳方式
我有一個伺服器日誌,當伺服器啟動時,它會將特定的文本行輸出到其日誌文件中。我想在伺服器啟動後執行一個命令,因此執行以下操作:
tail -f /path/to/serverLog | grep "server is up" ...(now, e.g., wget on server)?
做這個的最好方式是什麼?
一個簡單的方法是 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 可能會更優雅一些,並且還可以替換對 tail 的需要。如果使用 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"); } }