लॉगरोट कॉन्फ़िगरेशन फ़ाइल सिंटैक्स - कई वाइल्डकार्ड प्रविष्टियाँ संभव है?


83

चूंकि मैन पेज मेरे प्रश्न का उत्तर नहीं देता है और मैं रोटेशन चक्र को बाध्य नहीं करना चाहता, इसलिए मैंने यहां सवाल पूछने का फैसला किया।

Logrotate का मैन पेज निम्नलिखित उदाहरण देता है:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

वाइल्डकार्ड के साथ सभी उदाहरणों में केवल एक प्रविष्टि है। अब, मुझे इसमें दिलचस्पी है कि क्या यह भी अनुमति है:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

यहां तर्क दिया गया है: मेरे पास कई vhosts हैं और मैंने उपयोगकर्ता द्वारा उन vhosts का "विभाजन" किया है। चूंकि लॉग फाइलें विश्व-पठनीय हैं, इसलिए मैं उपयोगकर्ता होम निर्देशिका में एक फ़ोल्डर को बांधना चाहता हूं, लेकिन इसे उन लॉग फ़ाइलों तक सीमित कर दें जो उपयोगकर्ता "मालिक" हैं, जो लॉग को फ़ोल्डर्स में अलग करके (और बाइंड करके) सबसे आसान है। - वैसे भी उस योजना की आवश्यकता होती है)। इसलिए मैं /var/log/httpdउस निर्देशिका के उपनिर्देशिकाओं के तहत सभी लॉग फ़ाइलों के तहत दोनों लॉग फ़ाइलों को घुमाने के लिए एक समाधान की तलाश कर रहा हूं - प्रत्येक उपनिर्देशिका को नाम द्वारा सूचीबद्ध किए बिना

सामान्य तौर पर मैन पेज में कोई सुराग नहीं दिया जाता है कि वाइल्डकार्ड नियमों के लिए कई प्रविष्टियां संभव हैं या केवल पूर्ण पथ के लिए। मैं लॉगट्रेट संस्करण 3.7.8-6 का उपयोग कर रहा हूं जो डेबियन "निचोड़" के साथ आता है, लेकिन मुझे लगता है कि यह जरूरी नहीं कि एक डिस्ट्रो या प्रोग्राम संस्करण के लिए विशिष्ट है।

जवाबों:


119

हां, आप कई वाइल्ड कार्ड का उपयोग कर सकते हैं। आप ऐसा करके वास्तविक घुमावों को पूरा किए बिना अपनी फ़ाइल का परीक्षण कर सकते हैं:

logrotate -d -f /etc/logrotate.conf
  • -d = डीबग मोड को चालू करता है। डिबग मोड में, लॉग में या लॉगरोट स्टेट फाइल में कोई बदलाव नहीं किया जाएगा।

  • -f = लॉगोट्रेट को रोटेशन को मजबूर करने के लिए कहता है, भले ही यह नहीं लगता कि यह आवश्यक है। कभी-कभी लॉगोट्रोट में नई प्रविष्टियों को जोड़ने के बाद यह उपयोगी होता है, या यदि पुरानी लॉग फाइल को हाथ से हटा दिया गया है, क्योंकि नई फाइलें बनाई जाएंगी, और लॉगिंग सही ढंग से टिन करेगा। '


3
आपका बहुत बहुत धन्यवाद! बस कोशिश की और यह काम करता है। यह आउटपुट से प्रकट होता है कि वाइल्डकार्ड से शेल में काम करने की उम्मीद की जा सकती है।
0xC0000022L

24

मैं बस स्पष्ट करना चाहता था, क्योंकि मुझे यही मिला है कि कैसे करना है,

एकल लॉग के लिए एकाधिक लॉग फ़ाइलों को निर्दिष्ट करने की अनुमति है, जैसे

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

//, क्या कई लाइनों पर होने वाले विभिन्न रास्तों के साथ कोई समस्या नहीं है?
नाथन बसानी

@NathanBasanese मैं आपके प्रश्न को पूरी तरह से नहीं समझता, मुझे लगता है कि आप डिस्क पर कहीं भी फाइलों पर पथ लाइनों को इंगित कर सकते हैं, वे सभी एक ही निर्देशिका उपसर्ग में नहीं हैं।
थोरसुमोनर

@NathanBasanese ओह, मुझे लगता है कि मैं समझता हूं, विभिन्न लाइनों पर कई लॉग रोटेशन लक्ष्य होना एक सामान्य उपयोग प्रतीत होता है, मैंने उस फॉर्म को अन्य logrotate.d स्क्रिप्ट से कॉपी किया है, उदाहरण के लिए /etc/logrotate.d/rsyslog
ThsSummoner

4

लॉगोट के लिए मैन पेज से :

ध्यान दें कि लॉग फ़ाइल नाम उद्धरणों में संलग्न हो सकते हैं (और यदि नाम रिक्त स्थान होते हैं तो उद्धरण आवश्यक हैं)। सामान्य शेल उद्धरण नियम लागू होते हैं, ', ", और \ वर्णों के साथ।

एकल से कई पैटर्न में जाने पर उद्धरण चिह्नों को संशोधित या हटाना याद रखें:

यह काम:

/var/log/*.log /var/log/*.blog {

यह भी काम करता है:

/var/log/*.log
/var/log/*.blog {

यह काम नहीं करता:

'/var/log/*.log /var/log/*.blog' {

और न ही यह:

"/var/log/*.log /var/log/*.blog" {

एकल पैटर्न मामले के साथ तुलना करें।

यह काम:

'/var/log/*.log' {

और यह भी काम करता है:

"/var/log/*.log" {

Logrotate 3.10.0 के साथ परीक्षण किया गया


2
यह जानना दिलचस्प होगा कि क्या यह काम करता है:"/var/space /log/*.log" "/var/log/*.blog"
काजमग्नस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.