2011-01-11 12 views
8

मैं ग्रेप साथ पूंछ लॉग फ़ाइल करना चाहते हैं और मेल तरह के माध्यम से इसे भेजा:पूंछ और ग्रेप लॉग और मेल (लिनक्स)

tail -f /var/log/foo.log | grep error | mail -s subject [email protected] 

मैं यह कैसे कर सकते हैं?

+0

यह प्रश्न "मेरे पास प्रिंट ('फू') जैसा है, और मैं इसे 'फू' प्रिंट करना चाहता हूं। मैं यह कैसे कर सकता हूं?" आपका प्रश्न वास्तव में क्या है? –

+1

शायद आप 'tail' * -f * नहीं चाहते हैं क्योंकि यह लगातार फ़ाइल के नीचे का पालन करेगा। 'grep' ** पूंछ ** लॉग नहीं है, या तो। समस्या क्या है जिसे आप हल करने की कोशिश कर रहे हैं? – Johnsyweb

+0

'tail -f .. | grep ... 'फ़ाइल बढ़ने के साथ और grep के उपयोग के साथ संलग्न डेटा को आउटपुट करना है, यह केवल केवल – ajreal

उत्तर

2

मुझे इस पर जाना होगा। शायद अगर मैं अपने आईकी बैश कोड की जांच करता हूं तो मैं कुछ सीखूंगा। ऐसा करने का एक मौका है कि ऐसा करने के लिए पहले से ही एक गजबियन समाधान हैं, लेकिन मुझे पता नहीं चल रहा है, क्योंकि मुझे यकीन है कि आपने साइबरोअन की गहराई और चौड़ाई को पार किया है। ऐसा लगता है कि आप जो चाहते हैं उसे दो बिट्स में विभाजित किया जा सकता है: 1) नियमित अंतराल पर फ़ाइल की 'नवीनतम पूंछ' प्राप्त होती है, 2) यदि नवीनतम पूंछ वास्तव में मौजूद है, तो इसे ई-मेल द्वारा भेजें। 1 में नियमित अंतराल के लिए, क्रॉन का उपयोग करें। 2 में नवीनतम पूंछ प्राप्त करने के लिए, आपको फ़ाइल आकार का ट्रैक रखना होगा। नीचे की बैश स्क्रिप्ट यह करती है - यह 2 का समाधान है) जिसे क्रॉन द्वारा बुलाया जा सकता है। यह उस फ़ाइल के खंड की गणना करने के लिए कैश किए गए फ़ाइल आकार का उपयोग करता है जिसे उसे मेल करने की आवश्यकता होती है। ध्यान दें कि फ़ाइल के लिए एक और फ़ाइल myfile .offset.myfile बनाया गया है। साथ ही, स्क्रिप्ट फ़ाइल नाम में पथ घटकों की अनुमति नहीं देती है। पुनर्लेखन, या इसे आमंत्रण में ठीक करें [उदा। (सीडी/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 
+0

आपके प्रश्न के लिए grep भाग का उत्तर नहीं दिया गया था। व्यायाम के रूप में छोड़ दिया। – micans

+0

फ़ाइल नाम परिवर्तनीय विस्तार के आसपास पूर्ण उद्धरण की आवश्यकता है। बैश के लिए पथ सभी प्रणालियों के लिए सही नहीं है; शायद 'env' के माध्यम से आह्वान करें। 'Stat' का आउटपुट सिस्टम और संस्करणों (!) के बीच अत्यधिक चर है। हाल ही में जीएनयू स्टेटस को मानते हुए, इसे हल करने के लिए कोशिश करें और पार्स करने की आवश्यकता से बचें। – Sorpigal

+0

कोई 'बिल्ली' की आवश्यकता नहीं है: 'ऑफ़सेट = $ (<। ऑफसेट। $ फ़ाइल) '। 'If ​​[[-e $ file && $ size> $ ऑफसेट]] का दूसरा भाग एक व्याख्यात्मक तुलना है, इसलिए यह अपेक्षा नहीं करेगा कि आप क्या उम्मीद करते हैं, उदाहरण के लिए, '$ size' == 10 और' $ ऑफ़सेट '== 2. इसके बजाए इसका उपयोग करें: 'अगर [[-e $ फ़ाइल]] && (($ आकार> $ ऑफ़सेट))'। आप '(()) 'और' $ (())' के अंदर अधिकांश मामलों में डॉलर के संकेतों को छोड़ सकते हैं। –

17

जब ईमेल त्रुटियां होती हैं तब आपको एक ईमेल भेजना चाहते हैं? यही कारण है कि असफल हो सकता है;)

आप फिर भी कुछ इस तरह की कोशिश कर सकते हैं:

tail -f $log | 
grep --line-buffered error | 
while read line 
do 
    echo "$line" | mail -s subject "$email" 
done 

ग्रेप उत्पादन की हर पंक्ति के कौन से एक ईमेल भेजता है।

nohup ./monitor.sh & 

साथ खोल स्क्रिप्ट ऊपर

भागो तो यह पृष्ठभूमि में चल रहा रखेंगे।

+1

आप पीछे चल बैकस्लैश जरूरत नहीं। धन्यवाद @glenn जैकमैन –

+0

दिलचस्प ... एक बात मैं याद खोल पीछे पाइप के लिए अगली पंक्ति में दिखेगा - –

+1

मान लें कि मैं त्रुटि के बाद भी 10 लाइनों को मुद्रित करना चाहता हूं (grep -A 10 त्रुटि)। आपके दृष्टिकोण में, मुझे 10 ईमेल प्राप्त होंगे, मुझे 10 लाइनों सहित केवल एक मेल प्राप्त करने के लिए क्या करना होगा? – markus

संबंधित मुद्दे