सवाल एक निर्देशिका और इसकी उपनिर्देशिका में फ़ाइलों को logrotating


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


55
2017-12-01 18:31


मूल




जवाब:


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

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

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

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

logrotate -d testconfig.conf

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


74
2017-12-01 18:49



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


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

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


4
2018-02-16 16:32





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

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

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

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


1
2018-03-24 12:28



यह वाइल्डकार्ड पैटर्न मेरे लिए काम नहीं करता था। RHEL 7.3 पर Logrotate 3.8.6 - northben
शायद आपको सक्षम करना चाहिए globstar लॉगरोटेट चलाने से पहले। यह इसे बाश के लिए सक्षम करेगा shopt -s globstar। - bat_ventzi
मेरी भी यही समस्या है। उबंटू 16.04.3 पर लॉगरोटेट 3.8.7। ls /var/log/basedir/**/*.log वर्णित के रूप में कार्य करता है, लेकिन logrotate नहीं करता है। - frogstarr78