मेरे पास क्रैश लॉग के साथ एक निर्देशिका है, और मैं एक खोज आदेश के आधार पर बैश स्क्रिप्ट में एक सशर्त विवरण का उपयोग करना चाहूंगा।
लॉग फ़ाइलों को इस प्रारूप में संग्रहीत किया जाता है:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
मैं चाहता हूं कि यदि केवल 5 मिनट में संशोधित किया गया है तो एक विशिष्ट ऐप के लिए क्रैश लॉग होने पर यह कथन सही है। find
आदेश है कि मैं का प्रयोग करेंगे है:
find /var/log/crashes -name app-\*\.log -mmin -5
मुझे यकीन नहीं है कि इसे एक if
बयान में ठीक से कैसे शामिल किया जाए। मुझे लगता है कि यह काम कर सकता है:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
कुछ क्षेत्र हैं जहाँ मैं अस्पष्ट हूँ:
- मैंने झंडे को देखा है, लेकिन मुझे यकीन नहीं है कि कौन सा, यदि कोई है, जो मुझे उपयोग करना चाहिए।
- क्या मुझे
test
निर्देश की आवश्यकता है या क्या मुझे सीधे खोज आदेश के परिणामों के खिलाफ प्रक्रिया करनी चाहिए, या शायदfind... | wc -l
इसके बजाय एक पंक्ति गणना प्राप्त करने के लिए उपयोग करना चाहिए? - इस प्रश्न का उत्तर देने के लिए 100% आवश्यक नहीं है, लेकिन
test
रिटर्न कोड के खिलाफ परीक्षण के लिए है जो वापसी के आदेश देता है? और वे अदृश्य के प्रकार हैं - के बाहरstdout
/stderr
? मैंman
पृष्ठ को पढ़ता हूं लेकिन मैं अभी भी स्पष्ट नहीं हूं कि इसका उपयोग कबtest
और कैसे करना है।
... -exec command ';' -quit
, लेकिन मुझे विश्वास नहीं है कि परिणाम को पार्स करने के अलावा बाद के लिए कोई समाधान है। इसके अलावा, या तो मामले में, find
(फ़ाइल नाम में वर्णों से सीमांकक को अलग करने में असमर्थता) के परिणाम को पार्स करने के साथ प्राथमिक समस्या लागू नहीं होती है, क्योंकि आपको इन मामलों में सीमांकक खोजने की आवश्यकता नहीं है।
find ... -exec
। उदाहरण के तहत यह भी देखें कि खोज के आउटपुट खराब अभ्यास पर क्यों लूपिंग है?