लोगरोट काम नहीं कर रहा है


18

मैं अपनी एपीपीएस फाइलों को साप्ताहिक रूप से घुमाने के लिए अपने वीपीएस पर काम करने के लिए लॉगरोट प्राप्त करने की कोशिश कर रहा हूं। वर्तमान में Apache2 config फाइल की सामग्री इस प्रकार है।

"/var/www/user/site.com/logs/*.log"   {
        weekly
        missingok
        rotate 8
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

मैंने इसे अभी दो सप्ताह के लिए छोड़ दिया है और जहां तक ​​मैं बता सकता हूं कुछ भी नहीं बदला है। जब मैं इसे कमांड लाइन से अनुकरण करता हूं तो मुझे निम्न आउटपुट मिलता है।

user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log" 

Handling 1 logs

rotating pattern: "/var/www/user/site.com/logs/*.log"     weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
  log does not need rotating
considering log /var/www/user/site.com/logs/error.log
  log does not need rotating
not running postrotate script, since no logs were rotated

क्या आईवीई ने गलत तरीके से कॉन्फ़िगर किया है?

मेरी स्थिति फ़ाइल रिक्त है :(

user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2

अपडेट करें

मैंने स्टेटस फ़ाइल को डिलीट कर दिया और लॉगोटेट का एक फोर्स रन किया और अब लॉग ऐसे दिखते हैं जैसे उन्हें घुमाया गया हो और स्टेटस फाइल बहुत ही अच्छी लग रही हो!

sudo rm /var/lib/logrotate/status

sudo /usr/sbin/logrotate -f /etc/logrotate.conf

जवाबों:


17

मुझे लगता है कि weeklyइसका मतलब यह है कि लॉगरोट आपकी पहुंच के लिए कम से कम एक सप्ताह पुरानी प्रविष्टि देखना चाहता है।

इसलिए समस्या यह प्रतीत होती है कि आप रोटेशन को ट्रिगर करने के लिए राज्य प्रविष्टि को संग्रहीत नहीं कर रहे हैं।


इस मामले के सरल के उदाहरण के माध्यम से एक कदम रखा गया है, कैसे लॉग लॉगाइल को घुमाने के लिए तय करता है
(ये फेडोरा पथ हैं, उबंटू, सेंटोस आदि अलग हो सकते हैं)

(मैंने कुछ अनुरोध किया है http://localhostताकि access_log में कुछ प्रविष्टियां हों, अन्यथा लॉगरोटेट कभी भी घूमता नहीं है ...)

इसलिए मैंने अपाचे के लिए अपना लॉगोटेट साप्ताहिक रूप से सेट किया है;

/var/log/httpd/*log {
        weekly
...
}

और मूल रूप से /var/lib/logrotate.statusफ़ाइल में कोई प्रविष्टि नहीं है

# grep access_log /var/lib/logrotate.status
<- nothing

तो लॉगोटेट access_logफ़ाइल को घुमाता नहीं है ;

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 ...
considering log /var/log/httpd/access_log
  log does not need rotating

हालाँकि अगर मैं मैन्युअल रूप से लॉकरोट को ऐसे ही चलाता हूं;

#  /usr/sbin/logrotate   /etc/logrotate.d/httpd 

httpd access_log के लिए राज्य फ़ाइल में अब एक प्रविष्टि है;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-5-11

हालांकि अपाचे अभी भी लॉग को घुमाने नहीं जा रहा है, क्योंकि प्रविष्टि केवल 0 दिन पुरानी है (2012-5-11);

  #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 considering log /var/log/httpd/access_log
   log does not need rotating

हालाँकि यदि आप vi के साथ स्थिति फ़ाइल को संपादित करते हैं, vi /var/lib/logrotate.statusतो तारीख को एक सप्ताह से अधिक निर्धारित करने के लिए कुछ इस तरह से ...;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-4-11    <---    more than a week ago..

तब लॉगऑटेट अब सही ढंग से फाइल को घुमाता है क्योंकि राज्य फ़ाइल में तारीख 2012-4-11आज से एक सप्ताह पहले की है2012-5-11

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd
 considering log /var/log/httpd/access_log
 log needs rotating           <---    logrotate rotates the file.

(यह ध्यान में रखें कि -dकारण ड्राई-रन, इसलिए केवल निरीक्षण करने के लिए उपयोगी है, आपको वास्तव में -dस्टेटस एंट्री या फाइल आदि को घुमाने के बिना कमांड को चलाना होगा )


1
लॉग फ़ाइलों में एक सप्ताह से अधिक पुराने तरीके से प्रविष्टियां थीं - ऐसा प्रतीत होता है कि यह अब कार्य कर रही है, लेकिन मुझे लगता है कि मैं अब से एक सप्ताह का पता
लगाऊंगा

2
क्षमा करें, मैं उत्तर में अधिक स्पष्ट हो सकता था, लेकिन मुझे लगता है कि साप्ताहिक घूमने के लिए /var/lib/logrotate.statusकम से कम एक सप्ताह पुरानी तारीख के साथ फाइल में प्रविष्टि की आवश्यकता है । मैंने एक उदाहरण के साथ उत्तर को अद्यतन किया ...
टॉम एच

इस तरह के एक स्पष्ट स्पष्टीकरण के लिए धन्यवाद - मैं पूरी तरह से चीजों की तारीख के बारे में समझता हूं, यह सिर्फ तब तक नहीं होता है जब तक कि मैं मैन्युअल रूप से कमांड को कॉल नहीं करता ... ऐसा लगता है जैसे कि CRON लॉग रोटेट नहीं कह रहा है?
मलाची

मैं लिनक्स प्रशासन के लिए अपेक्षाकृत नया हूं ... /etc/cron.daily/logrotate/ के अंदर है: #! / Bin / sh test -x / usr / sbin / logrotate || बाहर निकलें 0
मालाची

7
log does not need rotating

ऐसा इसलिए हो सकता है क्योंकि आप लॉग फाइलें खाली हैं।
यह स्थिति हो सकती है क्योंकि अपाचे अभी भी पिछली लॉग फ़ाइल में लिखता है, जिसे फिर से शुरू किए बिना अपाचे को फिर से नाम दिया गया है। तो access.log बन गया access.log.1 और अपाचे इसमें लिखता है।

या आपको लॉग के निर्माण के समय की समस्या है:

ls -al --time=ctime /var/www/user/site.com/logs/

आप notifempty0 बाइट लॉग नहीं घुमाए जाने से निपटने के लिए लाइन पर टिप्पणी कर सकते हैं । फिर आप touchप्रत्येक परीक्षण से पहले एक नई लॉग फ़ाइल चाहते हैं, ताकि लॉगोट्रेट में कुछ घूमने के लिए हो।
बंजर

6

मुझे इसी तरह के मुद्दे का सामना करना पड़ा, इनमें से किसी भी जवाब ने मेरी मदद नहीं की। मेरी लॉग फ़ाइल बहुत बड़ी और पुरानी थी, मेरा कॉन्फ़िगरेशन 100% ठीक और वैध था, स्थिति फ़ाइल को हटाने से मदद नहीं मिली।

समस्या यह है कि समस्या डुप्लिकेट लॉगोट प्रविष्टियों में थी । जब मैं अपने कॉन्फ़िगर फ़ाइल पर मैन्युअल रूप से लॉगऑउट करता हूं तो केवल उसी तरह:

logrotate -df /etc/logrotate.d/my_service_name

इसने कोई त्रुटि नहीं दिखाई, यह सिर्फ कहा:

log does not need rotating

मैं अभी भी नहीं जानता कि वास्तव में क्यों। लेकिन जब मैं उस तरह का पूरा लॉकरेट कमांड चलाता हूं:

logrotate -f /etc/logrotate.conf

मुझे निम्नलिखित पंक्ति मिली:

error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log

यह पता चला कि मेरी सेवा के लिए लॉगरोट कॉन्फिग फाइल में नेगनेक्स एक्सेस लॉग को घुमाने के लिए प्रविष्टियां थीं और साथ ही सर्विस लॉग भी थी। और उस ngnix logrotate config के साथ विवादित है, जिसमें सभी nginx प्रविष्टियों के लिए एक नियम है:

# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {

इसलिए मेरे मामले का समाधान बहुत आसान है: मुझे अपने कॉन्फ़िगरेशन से परस्पर विरोधी नगनेक्स लॉग रोटेशन नियम को हटाना पड़ा ।

मुझे लगता है कि लॉरोजेट ने नए संस्करणों में से केवल एक नियम के टकराव पर प्रसंस्करण फ़ाइल को निरस्त करना शुरू कर दिया। मुझे यह त्रुटि v.3.8.7 के साथ मिलती है, लेकिन v.3.7.8 के तहत एक ही परस्पर विरोधी कॉन्फ़िगरेशन के साथ यह एक ही त्रुटि लिखता है लेकिन ठीक घुमाता है। यद्यपि मुझे लॉगट्रेट चैंज में कोई रिकॉर्ड नहीं मिला।


आप सबसे हाल के संस्करणों के बारे में सही प्रतीत होते हैं। मेरे पास डुप्लिकेट प्रविष्टियाँ भी थीं; लेकिन जब लॉग लॉग को मैन्युअल रूप से चला रहा हो; यह ठीक काम किया। रात वापसी मूल्य 0 पर; लेकिन यह सही ढंग से नहीं चला था ...
क्रिस Maes

2

sudo logrotate -f --verbose /etc/logrotate.d/apache2 कंसोल में क्या लिखा है, यह देखने की कोशिश करें और जो कुछ भी गलत है उसे ठीक करें।


0

मेरे पास एक डेबियन 7 मशीन थी, जो एक सिस्टम अपडेट के बाद, मेल लॉग को नहीं घुमाती थी। अन्य सभी लॉग लेकिन मेल वाले सही ढंग से घुमाए गए थे। मुझे पता चला कि मेल लॉग कई गीगाबाइट बढ़े थे। मैंने हमेशा वेबमिन के माध्यम से लॉग रोटेशन को प्रबंधित किया। फिर, दौड़ते हुए logrotate -d /etc/logrotate.confमैंने निम्नलिखित संदेश देखा:

Ignoring rsyslog.dpkg-old, because of .dpkg-old ending

यह पता चला कि मेरी मेल रोटेशन प्रविष्टियों को सूचीबद्ध किया /etc/logrotate.d/rsyslog.dpkg-oldगया था, जिसे अनदेखा कर दिया गया था! फ़ाइल का नाम बदलना लॉग फ़ाइल रोटेशन को ठीक करता है :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.