2010-12-02 22 views
29

क्या tail -f log.txt जैसी लॉग फ़ाइल की निगरानी करने का कोई सस्ता तरीका है, तो [error] जैसा कुछ दिखाई देता है, तो कमांड निष्पादित करें?शैलस्क्रिप्ट एक लॉग फ़ाइल की निगरानी करने के लिए यदि कीवर्ड ट्रिगर करता है तो कमांड निष्पादित करता है?

धन्यवाद।

उत्तर

43
tail -fn0 logfile | \ 
while read line ; do 
     echo "$line" | grep "pattern" 
     if [ $? = 0 ] 
     then 
       ... do something ... 
     fi 
done 
+2

ओह, एक और बात, 'पूंछ -fn0 logfile' के बाद से HTTP सर्वर लॉग फ़ाइल जल्दी से नाम और gzip'ed कर रहे हैं की समय सीमा समाप्त होने लगता है। स्क्रिप्ट अभी भी पुरानी फाइल-डिस्क्रिप्टर की निगरानी करता है जो मुझे लगता है? क्या 'tail' कमांड के लिए कुछ समय बाद ऑटो इनलाइन फ़ाइल इनोड या कुछ अपडेट करने का कोई तरीका है? – est

+9

बस पूंछ कमांड में एक --रीरी जोड़ें, या -f के बजाय -F का उपयोग करें। इससे हो जाना चाहिए। – Zizzencs

+1

मेलिंग लाइनों को प्रदर्शित किए बिना रिटर्न कोड सेट करने के लिए 'grep -q' पर भी विचार करें। –

12

मैंने यह भी पाया है कि आप पैटर्न के लिए पर नजर रखने और कुछ कार्रवाई करने के लिए awk उपयोग कर सकते हैं जब पैटर्न पाया जाता है:

tail -fn0 logfile | awk '/pattern/ { print | "command" }' 

यह आदेश निष्पादित करेंगे जब पैटर्न लॉग में पाया जाता है। कमांड स्क्रिप्ट स्क्रिप्ट या कुछ और सहित यूनिक्स कमांड हो सकता है।

3

एक और भी मजबूत दृष्टिकोण monit है। यह टूल बहुत सी चीजों की निगरानी कर सकता है, लेकिन उनमें से एक यह है कि यह आसानी से एक या अधिक लॉग को पूंछ देगा, रेगेक्स के खिलाफ मैच करेगा और फिर एक स्क्रिप्ट ट्रिगर करेगा। यह विशेष रूप से उपयोगी होता है यदि आपके पास लॉग फ़ाइलों का संग्रह देखने के लिए या एक से अधिक ईवेंट ट्रिगर करने के लिए है।

0

Simple Automated Solution that covers a lot of scenarios:

उपयोग:

logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option] 

उदाहरण:

logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow 
इस टूल से

, आप एक लॉग फ़ाइल में विशिष्ट पैटर्न पर नजर रखने के लिए और फिर एक कमांड को गति प्रदान कर सकते हैं या स्क्रिप्ट जब पैटर्न मिलते हैं ... या नहीं मिला!

स्क्रिप्ट या आदेश थ्रेसहोल्ड और निकास कोड के आधार पर चलाने के लिए सेट किए जा सकते हैं।

उपकरण सीधे here डाउनलोड किया जा सकता है।

1

बैटर और सरल:

tail -f log.txt | egrep -m 1 "error" 
echo "Found error, do sth." 
... 
+1

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [बहुत सुधार होगा] (// meta.stackexchange.com/q/114762) दिखाकर इसका शैक्षिक मूल्य * क्यों * यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के लिए इसे और अधिक उपयोगी बना देगा, लेकिन समान नहीं, प्रश्न। स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, और संकेत दें कि कौन सी सीमाएं और धारणाएं लागू होती हैं। –