क्या logrotate
किसी निर्देशिका और उसके सभी उपनिर्देशिकाओं में लॉगफ़ाइल्स पर विचार करना संभव है ? (यानी स्पष्ट रूप से उपनिर्देशिकाओं को सूचीबद्ध किए बिना।)
क्या logrotate
किसी निर्देशिका और उसके सभी उपनिर्देशिकाओं में लॉगफ़ाइल्स पर विचार करना संभव है ? (यानी स्पष्ट रूप से उपनिर्देशिकाओं को सूचीबद्ध किए बिना।)
जवाबों:
आपकी उपनिर्देशिकाएँ कितनी गहरी हैं?
/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 झंडा प्रत्येक लॉग फ़ाइल को सूचीबद्ध करेगा जो इसे घुमाने के लिए विचार कर रही है।
-f
विकल्प "बल रन" के लिए logrotate बताता है। कमांड के अंत में एक नंगे शब्द डिफ़ॉल्ट के बजाय उपयोग करने के लिए एक कॉन्फ़िगर फ़ाइल है। तो logrotate -f /some/config
इसका मतलब है कि कॉन्फिग फाइल के साथ रन करें, और हमेशा रन करें भले ही कॉन्फिग फाइल कहे कि अभी चलने का समय नहीं है। मेरी अप्रशिक्षित आँखों के लिए, और मेरे पूर्ववर्ती के लिए जो उस के साथ एक क्रॉन नौकरी में डाल दिया, ऐसा लग रहा था कि -f
बस कॉन्फ़िगर फ़ाइल को निर्दिष्ट कर रहा था। काफी उलझन भरा।
मेरे मामले में, उपनिर्देशिकाओं की गहराई चेतावनी के बिना बदल सकती है, इसलिए मैंने सभी उपनिर्देशिकाओं को खोजने और प्रत्येक निर्देशिका के लिए एक विन्यास प्रविष्टि बनाने के लिए एक बैश स्क्रिप्ट की स्थापना की।
मेरे लिए रोटेशन के बाद उपनिर्देशिकाओं की संरचना रखना भी महत्वपूर्ण है, जो वाइल्डकार्ड (यानी @ दान का जवाब) नहीं लगता था। यदि आप दैनिक लॉग रोटेशन कर रहे हैं, तो आप इस स्क्रिप्ट को दैनिक क्रोन-जॉब में डाल सकते हैं।
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
यह पुराना धागा है, लेकिन आप निम्न कार्य कर सकते हैं:
/var/log/basedir/**/*.log {
daily
rotate 5
}
ये दोनों सितारे शून्य या अधिक निर्देशिकाओं से मेल खाएंगे। आपको सावधान रहना चाहिए, हालांकि, आप लॉग फ़ाइलों को कैसे घुमाए जाने के लिए परिभाषित करते हैं, क्योंकि आप उन फ़ाइलों को घुमा सकते हैं जिन्हें पहले से ही घुमाया जा चुका है। मैं यहाँ logrotate के मैनुअल का हवाला देता हूँ।
कृपया सावधानी के साथ वाइल्डकार्ड का उपयोग करें। यदि आप निर्दिष्ट करते हैं, तो लॉगोट्रोट पहले से घुमाए गए सहित सभी फाइलों को घुमाएगा। इसके चारों ओर एक रास्ता पुरानेडीयर निर्देश या अधिक सटीक वाइल्डकार्ड (जैसे * .log) का उपयोग करना है।
globstar
कि लॉगरोट चलाने से पहले आपको सक्षम होना चाहिए । यह इसे बैश के लिए सक्षम करेगा shopt -s globstar
।
-d
ड्राई रन मोड में लॉगोटेट रखता है (यानी वास्तव में कुछ भी नहीं बदलता है) वास्तव में।