對不起,如果標題沒有說清楚。計算文件中出現的次數。條件模式匹配
我有一個文件要每15分鐘讀一遍,並在其中找到一個特定的模式(例如超時)。文件沒有任何固定的更新頻率。
預期結果: - 1.如果在15分鐘內發現3次模式,請運行命令1。 2.如果在15分鐘內發現5次模式,請運行命令2。
要從每次檢查的最後讀取位置讀取文件。
感謝, GRV
對不起,如果標題沒有說清楚。計算文件中出現的次數。條件模式匹配
我有一個文件要每15分鐘讀一遍,並在其中找到一個特定的模式(例如超時)。文件沒有任何固定的更新頻率。
預期結果: - 1.如果在15分鐘內發現3次模式,請運行命令1。 2.如果在15分鐘內發現5次模式,請運行命令2。
要從每次檢查的最後讀取位置讀取文件。
感謝, GRV
的一種方式做,這是一個cron
工作。它比其他解決方案更爲複雜,但它非常可靠(即使您的「檢查腳本」崩潰,在該時間段過後它將再次被cron
調用)。該cron
可能是:
*/15 * * * * env DISPLAY=:0 /folder/checkscript >/dev/null 2>&1
的env DISPLAY=:0
可能不是你的情況是必要的,也可能是必要的,這取決於你的腳本(注:你可能需要這個適應你的情況下,運行回聲$DISPLAY
找到把你的變量放在案例中)。
你"checkscript"
可能是:
#!/bin/bash
if [ -f /tmp/checkVarCount ]; then oldCheckVar="$(cat /tmp/checkVarCount)"; else oldCheckVar="0"; fi
checkVar="$(grep -o "pattern" /folder/file | wc -l)"
echo "$checkVar" > /tmp/checkVarCount
checkVar="$(($checkVar-$oldCheckVar))"
if [ "$checkVar" -eq 3 ]; then command1; fi
if [ "$checkVar" -eq 5 ]; then command2; fi
exit
它不包括在你的問題,但如果你的意思是要執行的命令,以及如果該模式被發現的4倍或7倍,那麼你可以改變以上相關部分爲:
if [ "$checkVar" -ge 3 ] && [ "$checkVar" -lt 5 ]; then command1; fi
if [ "$checkVar" -ge 5 ]; then command2; fi
使用cron作業設置顯示有什麼意義? – diametralpitch
從'cron'調用某些程序時,如果沒有此環境變量,則無法運行。 –
你到目前爲止試過了什麼?最粗略的實現是每次讀取模式發生的總次數,並將該次數存儲在文件中。每隔15分鐘一次,將當前計數與先前存儲的數量進行比較,依此類推。 – codeforester
告訴我們您的代碼 –