2017-07-19 73 views
1

我有兩難處境。 我需要使用bash腳本檢查日誌文件。 腳本需要每5-10分鐘運行一次(在crontab中設置它),並在日誌中出現警告或錯誤時發送電子郵件。 但它只能檢查自上次檢查後添加的行,而不是一遍又一遍地檢查整個文檔。 我不知道如何只檢查自上次檢查後添加的行或最近10分鐘添加的行 睡眠狀態在我的情況下不起作用,因爲腳本不應該一直運行每5-10分鐘完成一次如何檢查自上次檢入bash後添加的行

+0

您的日誌文件有多大?幾個ko? 10 Mo? 10去? – Aserre

+0

找到了解決方案,我只是將行數保存在外部文件中,然後從中讀取。然後使用當前行數與之前行數的差值尾部 – C0BeH0K

回答

0

如果你的文件不是太大,你可以嘗試將你的日誌文件的前一行數存儲在一個環境變量中,並將它與當前行號進行比較。像下面的腳本的東西應該工作:

#!/bin/bash 

#here, detect_errors is a placeholder name for the function you already developped 
#we use only the lines we haven't seen yet in our detect_errors function 
detect_errors "$(head -n $(($(wc -l log.file) - OLD_LINE_COUNT)) log.file)" 

#we update the new value for the $OLD_LINE_COUNT 
export OLD_LINE_COUNT="$(wc -l log.file)" 

詳細解釋

  • head -n X myfile:顯示myfile
  • $((...))第一X線:在bash
  • wc -l log.file算術計算:行數對於我們的文件
  • $OLD_LINE_COUNT:environement變量我們存儲上一次迭代的行數(等於0,當我們第一次啓動腳本)

如果該文件是不變的,$(wc -l log.file) - OLD_LINE_COUNT將返回0,head -n 0返回空。

如果日誌文件太大,wc -l會花費很多時間,所以在這種情況下我的方法不會被推薦。

編輯:我還沒有問你的日誌文件是如何增加的。如果附加行添加到文件末尾,則應該使用tail -n而不是head -n

+0

謝謝,我用過你的邏輯,但不是將它保存到環境變量中,而是保存了外部文件中的行數 – C0BeH0K