लॉग को घुमाते समय अपाचे पुनः लोड से कैसे बचें?


25

मैं अपाचे एक्सेस-, एरर- और रीराइट-लॉग को घुमाने के लिए लॉगरोट का उपयोग करता हूं। मेरी विन्यास फाइल इस तरह दिखती है:

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

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

जवाबों:


42

Apache को पुनः लोड करने का कारण यह है कि एक बार फाइल खोलने के बाद, इसे एक फाइलहैंडल मिलता है, और यह उस फाइलहैंडल को लिखता रहेगा। जब आप फ़ाइल को स्थानांतरित करते हैं, तो यह नहीं दिखता है, यह केवल उसी हैंडल पर लिखता रहता है। जब आप एक पुनः लोड करते हैं, तो यह फ़ाइल को फिर से खोल देगा और एक नया हैंडल प्राप्त करेगा।

पुनः लोड से बचने के लिए, फ़ाइल को स्थानांतरित करने के बजाय, आप इसे कॉपी कर सकते हैं और पुरानी फ़ाइल को खाली कर सकते हैं। इस तरह अपाचे उसी फाइलहैंडल पर लिख सकता है। आप इस तरह से logrotate config फाइल के विकल्प "copytruncate" को जोड़कर ऐसा करते हैं:

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

आपके उत्तर के लिए धन्यवाद। तो मुझे लगता है कि जब मैं lastaction echo "" | /apache/*log endscriptफ़ाइलहैंडल जोड़ता हूं तो "खो गया" नहीं है?
वीणा

3
क्षमा करें, मुझे "कॉपी" के बजाय "कोपिट्रंकट" कहना चाहिए था। तो फिर तुम सब पर अंतिम बात की जरूरत नहीं है। मैं अपनी कैफीन स्ट्रीम में बहुत अधिक रक्त होने का दोष लगाता हूं
जेनी डी

एक आकर्षण की तरह काम करता है :)
वीणा

4
@ सावधान रहें, logrotateडॉक्टर कहते हैं: "ध्यान दें कि फ़ाइल की प्रतिलिपि बनाने और इसे रौंदने के बीच बहुत कम समय का टुकड़ा है, इसलिए कुछ लॉगिंग डेटा खो सकता है।"
टोटर

संभावना के अलावा कि कुछ डेटा खो सकता है, क्या कोई अन्य ज्ञात डाउनसाइड का उपयोग करने के लिए है copytruncate?
लियो गैलगिलोस

5

मैं आपको http://cronolog.org/ का उपयोग करने की सलाह देता हूं

इस तरह से मैं इसका उपयोग करता हूं:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

1
वेब सर्वर पर बहुत अधिक ट्रैफ़िक होने पर किसी भी बाहरी प्रोग्राम को पाइप करना एक समस्या हो सकती है। लेकिन यह बड़े करीने से फाइलहैंडल मुद्दे से बचता है।
जेनी डी

अच्छा विकल्प लगता है। क्या क्रोनोलोज मक्खी पर सेक करता है?
वीणा

Apache2-utils पैकेज में समान ऐप "रोटेटलॉग्स" है। बस विभिन्न एपाचे वर्चुअल सर्वर से एक ही लॉग फ़ाइल में "पाइप" नहीं करने के लिए सावधान रहें - वे एक दूसरे पर स्टंप करेंगे।
आर्य स्कालियोरॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.