2016-01-21 80 views
-1

有人可以告訴我這個腳本有什麼問題,它不起作用。當我運行它時,屏幕上沒有輸出/錯誤。監控腳本不輸出任何東西

腳本是監視一個日誌文件來檢查其中一列的值,如果它超過20則會回顯一條消息。

#!/bin/bash 

while true ; do 

COUNT=`tail -f /monitoring/log.20160121|cut -d" " -f39` 

echo $COUNT 

if [ $COUNT -gt 20 ] ;then 

echo "Count is high" 

break 

fi 

sleep 10 

done 
+0

我只是計算出COUNT ='tail -f /monitoring/log.20160121|cut -d「」-f39'有問題,但不知道如何解決 – Unixhelp

+0

那麼,如果你鍵入'tail -f/monitoring/log .20160121'在交互式shell中? –

+0

我可以問你是否看過這篇文章的編輯? –

回答

3

tail -f不會退出,所以您的腳本卡在那裏。我假設你只是對日誌的最後一行感興趣; tail -n 1這樣做。

其他景點:

  • 縮進:不知道有多少迷路了,而複製粘貼,但適當的縮進大量增加代碼的可讀性
  • 變量名:所有大寫變量名都望而卻步因爲它們可能與保留的(環境)變量名稱衝突
  • 帶反引號(` `)的命令替換 is discourag ed和形式$()是優選的;使得例如築巢容易
  • 既然你使用bash,您可以使用(())條件結構,比[ ]

一起更適合比較數字:

#!/bin/bash 

while true; do 
    count=$(tail -n 1 /monitoring/log.20160121 | cut -d " " -f 39) 

    echo $count 

    if ((count > 20)); then 
     echo "Count is high" 
     break 
    fi 

    sleep 10 

done 
+0

感謝Benjamin對你的專家意見,這將有所幫助。但尾巴-n,腳本只是在檢查最後一行後退出,但我想持續監視這個日誌文件 – Unixhelp

+0

@Unixhelp那麼,它會檢查日誌文件的最後一行每十秒,如果字段39大於20,則跳出while循環。它不應該從文件讀取後退出。 –