शेल स्क्रिप्ट में लॉगरोट को कैसे लागू किया जाए


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

मैं लॉग फ़ाइल के आकार को नियंत्रित करने के लिए लॉगरोट को लागू करना चाहता हूं, इसलिए अगर स्थिति ऊपर की तरह है, तो लॉगरेट को कैसे लागू किया जाए?

जवाबों:


11
#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

मैंने "&" हटा दिया है क्योंकि इससे कोई समस्या हो सकती है।


@ वीरेंद्र हमें लूप के अंदर लॉग्स को रोल करने का तर्क देने की आवश्यकता है क्योंकि आप एक अनंत लूप चला रहे हैं ..
उत्सुक

@ वीरेंद्र हम मेरी पिछली पोस्ट में एक त्रुटि थी .. "mv" एक नई फ़ाइल नहीं बनाएंगे लेकिन आप अपनी आवश्यकता के अनुसार स्क्रिप्ट को बदल सकते हैं।
उत्सुक

तो, के बजाय cpऔर mv, मैं लॉग फ़ाइल को हटा सकते हैं, तो यह एक ही नाम के साथ नई लॉग फ़ाइल होगी? (मेरी आवश्यकता है, अगर लॉग फ़ाइल कुछ सीमा तक पहुँच गया है, मैं उस लॉग फ़ाइल को हटाना चाहते हैं और फिर एक नई फ़ाइल बनाना चाहते हैं )
वीरेंद्र काकुमान

आपको >>लॉग फ़ाइल में संलग्न करना चाहिए , >इसे बार-बार लिखना होगा।
alcik

यदि मैं उपयोग करता हूं >, तो मैं प्राप्त कर रहा हूं tail: test.log: file truncated Hello World!.... यदि मैं उपयोग करता >>हूं, तो मुझे सही लॉग संदेश मिल रहा है, लेकिन फ़ाइल आकार बढ़ रहा है। हालत की जाँच करने के लिए कोई शर्त नहीं ...
वीरेंद्र

24

कैसे उपयोग कर रहा है savelog?

यह डेबियन और आरएच में उपलब्ध है और मुझे पता है कि हर दूसरे लिनक्स डिस्ट्रो बहुत सुंदर है। यह एक / बिन / श शेल स्क्रिप्ट है, इसलिए किसी अन्य यूनिक्स पर भी चलना चाहिए।

test.logचलाने से पहले कुछ भी लिखने से पहले savelog -n -c 7 test.log। यह test.log के 7 सबसे हाल के गैर-रिक्त संस्करणों को रखेगा। डिफ़ॉल्ट रूप से, यह घुमाए गए लॉग को संपीड़ित करेगा (लेकिन इसे अक्षम किया जा सकता है -l)।

यदि आप की जरूरत है, तो आप के आकार की जाँच कर सकते हैं test.logऔर केवल savelogअगर यह एक निश्चित आकार से अधिक है।


किसी भी विचार जो पैकेज में यह एडब्ल्यूएस लिनक्स (सेंटो के करीब, मुझे विश्वास है) पर है? डिफ़ॉल्ट स्थापना में बचत नहीं है। मैं इसे yum से डिफ़ॉल्ट
रिपोज

सेविंग आरएचईएल 5 में नहीं मिला। क्या आप जानते हैं कि इसे किस रेपो में होना चाहिए?
फेलिप अल्वारेज़

centos या RHEL5 पैकेजिंग के बारे में पता नहीं है, लेकिन आप पा सकते हैं /usr/bin/savelogपर खोल स्क्रिप्ट sources.debian.net/src/debianutils/4.7
कैस

2
मुझे savelogअपने किसी भी आरएचईएल / सेंटोस 5/6 बक्से में नहीं मिला है , इसलिए मैंने अभी इसे तदर्थ डाउनलोड किया है , और यह मेरी जरूरतों के लिए ठीक काम करता है।
डेल एंडरसन

एक नकारात्मक पक्ष savelogयह है कि यह फ़ाइल का नाम बदल देता है, लेकिन फिर परिष्करण से पहले पुराने लोगों को गज़ब करने में लंबा समय लगता है। इस बीच .0 लॉग पहले से ही अगले दिनों में प्रविष्टियाँ प्राप्त करता है। आदर्श रूप से लॉग रोटेशन के बीच का समय और लॉग को फिर से खोलने की प्रक्रिया का संकेत न्यूनतम होना चाहिए। मैं savelogइस वजह से संपीड़न सुविधा को अक्षम करता हूं ।
रस्टीक्स

2

मैंने इस सप्ताह के अंत में एक लोगो लिखा था । मैं शायद नहीं होता अगर मैंने @ JdeBP के महान उत्तर के बारे मेंmultilog पढ़ा हो

मैंने इस पर ध्यान केंद्रित किया कि यह हल्का है और bzip2 को इसके आउटपुट विखंडू में सक्षम करने में सक्षम है:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

हालांकि अभी तक बहुत कुछ किया और परीक्षण किया जाना है।


0

जैसा कि मैंने अभी तक स्वीकृत उत्तर में टिप्पणियां नहीं जोड़ी हैं , एक व्यस्त बॉक्स संकेत, जिसमें झंडा duनहीं है -b:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.