Shell-Script
監控一個日誌文件,根據不同的條件執行不同的命令
我有一個要監視的日誌文件,根據滿足的條件,應該執行不同的命令。
我在這裡找到了一個接近於此的解決方案。不幸的是,它對我不起作用,只是在終端中給了我空白行。
xterm -e "$path_to_program | tee -a ${log_path}" & tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo "VPN is running."") } /[HOST_NOT_FOUND]/ { system("echo "error"") }
是否有其他解決方案可以幫助我解決我的問題?
您在上面的範常式式碼中沒有正確轉義字元:您需要更多類似的東西:
tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo \"VPN is running.\"") } /\[HOST_NOT_FOUND\]/ { system("echo \"error\"")}'
您可能還想研究 logrotate 的使用。如果你利用它的
postrotate
規則,你可以讓一個日誌處理器為你處理一個不會無限增長和/或填滿儲存空間的日誌。
之前的解決方案有效,但只有我注意到的問題。出於某種原因,awk 僅每 2 分鐘讀取一次日誌文件,然後向終端發送“錯誤”垃圾郵件,因為當時 HOST_NOT_FOUND 在日誌中出現了多次。我找到了一個基於這個執行緒的更好的解決方案。請記住,尾巴必須單獨關閉。
tail -f ${log_path} | while read LOGLINE do [[ "${LOGLINE}" == *"Initialization Sequence Completed"*]] && echo "VPN is running" [[ "${LOGLINE}" == *HOST_NOT_FOUND"* ]] && echo "VPN failed." done