我想使用grep尾部日誌文件,並通過郵件 等發送它:尾和grep日誌和郵件(Linux)的
tail -f /var/log/foo.log | grep error | mail -s subject [email protected]
我怎麼能做到這一點?
我想使用grep尾部日誌文件,並通過郵件 等發送它:尾和grep日誌和郵件(Linux)的
tail -f /var/log/foo.log | grep error | mail -s subject [email protected]
我怎麼能做到這一點?
我會在這裏。也許我會學習一些東西,如果我的噁心的bash代碼被仔細檢查。有可能已經有一個巨大的解決方案來做到這一點,但我不會發現,因爲我確信你已經在網絡海洋的深度和寬度上進行了拖網。這聽起來像是你想要的東西可以分成兩個比特:1)定期獲取文件的'最新尾部',2)如果最新的尾部實際存在,通過電子郵件發送。對於1)中的常規時間間隔,請使用cron。要獲得2)中的最新尾部,您必須跟蹤文件大小。下面的bash腳本是這樣做的 - 這是2)可以由cron調用的解決方案。它使用緩存的文件大小來計算它需要發送的文件塊。請注意,對於文件myfile,會創建另一個文件.offset.myfile。此外,該腳本不允許在文件名中使用路徑組件。在調用中重寫或修復它[例如(cd/foo/bar & & segtail.sh zut),假設它被稱爲segtail.sh]。
#!/usr/local/bin/bash
file=$1
size=0
offset=0
if [[ $file =~/]]; then
echo "$0 does not accept path components in the file name" 2>&1
exit 1
fi
if [[ -e .offset.$file ]]; then
offset=$(<".offset.$file")
fi
if [[ -e $file ]]; then
size=$(stat -c "%s" "$file") # this assumes GNU stat, possibly present as gstat. CHECK!
# (gstat can also be Ganglias Status tool - careful).
fi
if (($size < $offset)); then # file might have been reduced in size
echo "reset offset to zero" 2>&1
offset=0
fi
echo $size > ".offset.$file"
if [[ -e $file && $size -gt $offset ]]; then
tail -c +$(($offset+1)) "$file" | head -c $(($size - $offset)) | mail -s "tail $file" [email protected]
fi
您想在發生電子郵件錯誤時發送電子郵件嗎?這可能會失敗;)
但是,您可以嘗試這樣的事情:
tail -f $log |
grep --line-buffered error |
while read line
do
echo "$line" | mail -s subject "$email"
done
這對於在grep的輸出的每一行發送一封電子郵件。
與
nohup ./monitor.sh &
上方運行shell腳本,所以它將繼續在後臺運行。
這個問題就像「我有`print('Foo');`我想要它打印'Foo',我該怎麼做? *你的問題究竟是什麼? – 2011-01-11 11:09:43
你可能不想`tail` * -f *,因爲它會一直跟在文件底部。 `grep`不**尾巴**日誌,無論是。你試圖解決什麼問題? – Johnsyweb 2011-01-11 11:33:47
`tail -f .. | grep ...`是在文件增長時使用grep輸出附加數據,並且使用grep時,它只打印只匹配 – ajreal 2011-01-11 12:47:36