एक निर्देशिका और उसके उपनिर्देशिकाओं में लॉगोट्रेटिंग फ़ाइलें


62

क्या logrotateकिसी निर्देशिका और उसके सभी उपनिर्देशिकाओं में लॉगफ़ाइल्स पर विचार करना संभव है ? (यानी स्पष्ट रूप से उपनिर्देशिकाओं को सूचीबद्ध किए बिना।)

जवाबों:


87

आपकी उपनिर्देशिकाएँ कितनी गहरी हैं?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}

सभी बारी बारी से होगा .log basedir में फ़ाइलें / साथ ही साथ सभी लॉग basedir के किसी भी प्रत्यक्ष बच्चे में फ़ाइलें। यदि आपको भी 1 स्तर गहरा जाने की आवश्यकता है तो बस एक और जोड़ें /var/log/basedir/*/*/*.logजब तक कि आपके पास प्रत्येक स्तर कवर न हो।

यह एक अलग लॉगरोट कॉन्फिग फाइल का उपयोग करके जांचा जा सकता है जिसमें एक बाधा होती है जो पूरी नहीं होगी (एक उच्च minsize) और फिर रनिंग लॉग अपने आप को वर्बोज़ मोड में घुमाएगी

logrotate -d testconfig.conf

-d झंडा प्रत्येक लॉग फ़ाइल को सूचीबद्ध करेगा जो इसे घुमाने के लिए विचार कर रही है।


6
धन्यवाद! ऐसा लगता है कि -dड्राई रन मोड में लॉगोटेट रखता है (यानी वास्तव में कुछ भी नहीं बदलता है) वास्तव में।
ithinkihaveacat

1
वास्तव में सीधे प्रासंगिक नहीं, लेकिन शायद किसी के लिए उपयोगी है। -fविकल्प "बल रन" के लिए logrotate बताता है। कमांड के अंत में एक नंगे शब्द डिफ़ॉल्ट के बजाय उपयोग करने के लिए एक कॉन्फ़िगर फ़ाइल है। तो logrotate -f /some/configइसका मतलब है कि कॉन्फिग फाइल के साथ रन करें, और हमेशा रन करें भले ही कॉन्फिग फाइल कहे कि अभी चलने का समय नहीं है। मेरी अप्रशिक्षित आँखों के लिए, और मेरे पूर्ववर्ती के लिए जो उस के साथ एक क्रॉन नौकरी में डाल दिया, ऐसा लग रहा था कि -fबस कॉन्फ़िगर फ़ाइल को निर्दिष्ट कर रहा था। काफी उलझन भरा।
दान प्रीतो

4

मेरे मामले में, उपनिर्देशिकाओं की गहराई चेतावनी के बिना बदल सकती है, इसलिए मैंने सभी उपनिर्देशिकाओं को खोजने और प्रत्येक निर्देशिका के लिए एक विन्यास प्रविष्टि बनाने के लिए एक बैश स्क्रिप्ट की स्थापना की।

मेरे लिए रोटेशन के बाद उपनिर्देशिकाओं की संरचना रखना भी महत्वपूर्ण है, जो वाइल्डकार्ड (यानी @ दान का जवाब) नहीं लगता था। यदि आप दैनिक लॉग रोटेशन कर रहे हैं, तो आप इस स्क्रिप्ट को दैनिक क्रोन-जॉब में डाल सकते हैं।

basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done

जैसे @DanR ने सुझाव दिया, के साथ परीक्षण करें logrotate -d


1

यह पुराना धागा है, लेकिन आप निम्न कार्य कर सकते हैं:

/var/log/basedir/**/*.log {
    daily
    rotate 5
}

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

कृपया सावधानी के साथ वाइल्डकार्ड का उपयोग करें। यदि आप निर्दिष्ट करते हैं, तो लॉगोट्रोट पहले से घुमाए गए सहित सभी फाइलों को घुमाएगा। इसके चारों ओर एक रास्ता पुरानेडीयर निर्देश या अधिक सटीक वाइल्डकार्ड (जैसे * .log) का उपयोग करना है।


3
इस वाइल्डकार्ड पैटर्न ने मेरे लिए काम नहीं किया। आरएचईएल 7.3 पर लॉगरोटेट 3.8.6
उत्तरबेन

हो सकता है globstarकि लॉगरोट चलाने से पहले आपको सक्षम होना चाहिए । यह इसे बैश के लिए सक्षम करेगा shopt -s globstar
बैट_वेंटी

मेरी भी यही समस्या है। उबंटू 16.04.3 पर 3.8.7 लॉग इन करें। ls /var/log/basedir/**/*.log वर्णित के रूप में काम करता है, लेकिन logrotate नहीं करता है।
frogstarr78

मेरे लिए या तो काम नहीं करता है, 3.11.0 logrotate पर। मुझे नहीं लगता कि बैश विस्तार का लॉगरोट वाइल्डकार्ड के साथ कुछ भी करना है। (समान सिंटैक्स को छोड़कर)
थायने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.