2010-12-02 47 views

回答

43
tail -fn0 logfile | \ 
while read line ; do 
     echo "$line" | grep "pattern" 
     if [ $? = 0 ] 
     then 
       ... do something ... 
     fi 
done 
+2

哦,還有一兩件事,在`尾-fn0 logfile`似乎到期,因爲HTTP服務器的日誌文件中快速重命名並gzip壓縮。腳本仍然監視我認爲的舊文件描述符?是否有一種方法可以在`tail`命令的一段時間後自動更新文件inode或其他東西? – est 2010-12-10 03:35:07

+9

只需向 - tail命令添加--retry,或者使用-F而不是-f。這應該做到這一點。 – Zizzencs 2010-12-14 14:32:33

12

我也發現了,你可以用awk來監控模式,並執行一些操作模式時發現:

tail -fn0 logfile | awk '/pattern/ { print | "command" }' 

這將執行命令時模式的日誌中找到。命令可以是任何unix命令,包括shell腳本或其他任何東西。

3

更強大的方法是monit。該工具可以監視很多事情,但其中之一是它可以輕鬆地拖尾一個或多個日誌,與正則表達式匹配,然後觸發腳本。如果您有一組要監視的日誌文件或多個要觸發的事件,這一點尤其有用。

0

Simple Automated Solution that covers a lot of scenarios:

用法:

logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option] 

例:

logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow 

有了這個工具,可以監視在日誌文件中的特定模式,然後觸發命令或當發現圖案時的腳本...或未找到!

腳本或命令可以設置爲基於閾值和退出代碼運行。

工具可以直接下載here

1

連擊簡單:

tail -f log.txt | egrep -m 1 "error" 
echo "Found error, do sth." 
... 
相關問題