我有兩難處境。 我需要使用bash腳本檢查日誌文件。 腳本需要每5-10分鐘運行一次(在crontab中設置它),並在日誌中出現警告或錯誤時發送電子郵件。 但它只能檢查自上次檢查後添加的行,而不是一遍又一遍地檢查整個文檔。 我不知道如何只檢查自上次檢查後添加的行或最近10分鐘添加的行 睡眠狀態在我的情況下不起作用,因爲腳本不應該一直運行每5-10分鐘完成一次如何檢查自上次檢入bash後添加的行
1
A
回答
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
相關問題
- 1. 自上次檢查後,Ruby IMAP「更改」
- 2. 如何添加與CTE的左加入,檢查我的查詢
- 3. bash:如何進行三重檢查?
- 4. MySQL查詢添加加入後檢查列
- 5. 自上次檢查後,文件中的字符串匹配
- 6. 如何添加在檢查和不檢查的使用jquery subract
- 7. 如何添加超過1dp的檢查
- 8. 如何檢查最後一次自動增長是否完成?
- 9. 查找自上次用python imaplib2檢查後添加到imap郵箱的新郵件嗎?
- 10. bash的:如果指令,檢查來自可變行數失敗
- 11. Datatable:添加行並檢查添加的行索引
- 12. 如何添加自定義的Ubercart檢查規則?
- 13. Jquery - 添加標記「已檢查」輸入
- 14. 動態添加時如何檢查RadioButton?
- 15. SQL:聚合與空檢查後加入
- 16. 檢查行數,然後插入值
- 17. 添加動態類如何檢查類後使用jQuery
- 18. 的Bash shell:每次追加輸入後換行的* .txt文件
- 19. 如何檢查是否有任何行添加到Datagridview
- 20. 使用if語句檢查輸入(bash)
- 21. 如何檢查bash中的有效字符串輸入?
- 22. 檢查中的Bash/Linux的
- 23. 如何在bash中檢查密碼
- 24. 檢查輸入值後
- 25. 如何檢查目錄是否在Bash的路徑上?
- 26. 如何檢查和升級FreeBSD上的Bash - 與Shellshock bug相關
- 27. SQL查詢檢索DISTINCT行左加入
- 28. 檢查兩次
- 29. 在SQLIte中,如何在現有列上添加檢查
- 30. 如何在bash中檢查python腳本的運行時/狀態?
您的日誌文件有多大?幾個ko? 10 Mo? 10去? – Aserre
找到了解決方案,我只是將行數保存在外部文件中,然後從中讀取。然後使用當前行數與之前行數的差值尾部 – C0BeH0K