Logrotate: गैर-लॉग फ़ाइलों को घुमाएगी?


17

मेरे पास एक बैकअप स्क्रिप्ट है जो विभिन्न फ़ाइलों और निर्देशिकाओं को संकुचित करती है और .tgz अभिलेखागार बनाती है। फाइलें नाम की हैं, जैसे

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

मैं इन फ़ाइलों को प्रबंधित करना चाहता हूं इसलिए केवल अंतिम 5 बैकअप रखे गए हैं, पुरानी फाइलें हटा दी गई हैं।

क्या मैं ऐसा करने के लिए लॉगरोटेट का उपयोग कर सकता हूं? वे फ़ाइलों को लॉग नहीं कर रहे हैं और पहले से ही संपीड़ित हैं। वे / रूट में हैं और / var / log में नहीं हैं - क्या मैं अभी भी इसका उपयोग कर सकता हूं?

धन्यवाद

जवाबों:


3

Logrotate फ़ाइलों को घुमाता है, इसलिए उत्तर हां है - शायद, और यदि कोई पर्याप्त अनुमति नहीं है तो उन्हें / बैकअप या कुछ और में रखें। जाँचें कि कौन सा समूह और उपयोगकर्ता घुमाए गए लॉग :-) हैं।

लॉगोट्रेट में संपीड़न के लिए विकल्प हैं, यदि "सेक" कॉन्फ़िगर नहीं किया गया है - तो यह कोशिश नहीं करेगा। आपके मामले में भी, "5 घुमाएँ" विकल्प।

/Etc/logrotate.d पर एक नज़र डालें (या जहां कभी यह आपके सिस्टम में संग्रहीत है)


26

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

हालाँकि, आप इसे उसी तरह से काम कर सकते हैं जब तक आप वर्णन करते हैं जब तक कि सबसे हालिया बैकअप बिना किसी डेट स्टैम्प के बनाया जाता है। यदि आप बैकअप प्रक्रिया /root/backup.tar.gzको उदाहरण के लिए बनाते हैं , तो आप निम्न लॉगरोट कॉन्फ़िगरेशन का उपयोग कर सकते हैं:

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

यहां विकल्पों का त्वरित विस्तृत विवरण:

  • rotate 5 - हटाने से पहले 5 घुमाव रखें
  • nocompress - रोटेट करने के बाद फाइल को कंप्रेस न करें
  • dateext - संख्या बढ़ाने के बजाय रोटेशन एक्सटेंशन के रूप में तारीख का उपयोग करें
  • dateformat _%Y-%m-%d - उस तिथि विस्तार प्रारूप को सेट करें जिसका आप उपयोग करना चाहते हैं
  • extension .tar.gz -- कर .tar.gz रोटेशन एक्सटेंशन के बाद आना
  • missingok - यदि हम जिस फ़ाइल को घुमाना चाहते हैं, वह नहीं है, तो इसके बारे में चिंता न करें और आगे बढ़ें (डिफ़ॉल्ट त्रुटि को फेंकना है)

उम्मीद है की यह मदद करेगा!


1
अच्छा काम। मैंने इसे पढ़कर कुछ बातें सीखीं। मैं हालांकि जोड़ना चाहता हूं, कि कुछ वितरण, विशेष रूप से RedHat EL, "एंटरप्राइज रेडी," तो YMMV विकल्प नहीं हैं।
zerolagtime 18

इस समाधान के अनुसार stackoverflow.com/questions/14858752/… logrotate कार्य को पूरा कर सकता है।
पीटर

22

आपको इसे करने के लिए logrotate का उपयोग करने की आवश्यकता नहीं है। बस इस तरह एक कमांड का उपयोग करें:

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

यह कमांड सबसे हालिया 5 फाइलों को छोड़ देगा और शेष (यदि कोई है) को हटा देगा। आप इसे क्रॉन जॉब में इस्तेमाल कर सकते हैं।


लेकिन यह बारी बारी से नहीं है ....
21

सवाल का जवाब नहीं देता।
kubanczyk

4
सवाल यह था कि यह हाल ही में पाँच सबसे अधिक बैकअप रखने के लिए था। और भी सरल: ls -t1 / root / backup_ * | tail -n +6 | xargs rm -f
yoyoma2

इसने मेरे सवाल का जवाब दिया । दुख की बात यह है कि मूल प्रश्न Google-फू के साथ निकटतम था।
सुकिमा

0

मेरा भी वही हाल था। Logrotate बहुत अच्छा लगता है, लेकिन यह मेरे लिए 100% काम नहीं करता क्योंकि यह डेटा और फ़ाइल नामों को मिसमैच करता है।

इसलिए, भ्रम से बचने के लिए, मैंने अंतिम 5 बैकअप रखने के लिए अपना वर्तमान बैकअप बनाने के बाद निष्पादित करने के लिए निम्न पंक्ति को शामिल करने का निर्णय लिया।

मेरे लॉग हैं:

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

मेरी बैकअप-स्क्रिप्ट में नई पंक्ति (ऊपर एक टिप्पणी के आधार पर)

  • Find / BCX / dumpsql / -type f | सॉर्ट -r | tail -n +6 | xargs rm

सादर,


-1

आप इसे मैन्युअल रूप से घुमा सकते हैं।

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

अब लॉग में डेटा डालने के लिए, बस करें

rotating_logger <file_path> "Welcome world!"

1
शायद आप अपनी पोस्ट को स्वरूपित करने में थोड़ा सा प्रयास कर सकते हैं, यदि आप चाहते हैं कि यह उपयोगी हो।
टिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.