लॉग को घुमाएगी नहीं


24

मेरे पास यह लॉग-इन कॉन्फ़िगरेशन है और मैं Ubuntu 10.04 पर चल रहा हूं।

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

मैंने कल /etc/logrotate.d में इसे डाला था और आज लॉग को घुमाया नहीं गया था।

नीचे चीजें हैं जो मैंने किया है:

  1. मैंने सत्यापित किया कि लॉग वास्तव में /var/log/mysql/mysql-slow.log में है
  2. जब जड़ के रूप में mysqladmin लाइनें ठीक काम करती हैं
  3. mysql mysql-slow.log को लिखने में सक्षम है

जब मैंने ऐसा किया:

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. वह लॉग कहां है जो दर्शाता है कि लॉगरोट सफल था? मैं देखना चाहता हूं कि क्या ऐसा कुछ है जो कहेगा कि कोई समस्या थी।
  2. कोई विचार क्यों लोगो लॉग इन नहीं कर रहा है?

तो यह काम करता है जब हाथ से निष्पादित किया जाता है? है crondचल रहा है?
काइल स्मिथ

हां, यह काम करता है, अगर आपका मतलब है logrotate -f mysql_slow_query। और क्रोन चल रहा है।
कारमेन

क्या आप सुनिश्चित हैं कि पहले से ही एक और कॉन्फ़िगर नहीं है जो उस लॉग फ़ाइल को संभालने वाला है? शायद mysql-server? भागो grep '/var/log/mysql' /etc/logrotate.d/*
Zoredache

मैंने उस कमांड को चलाया और केवल मेरा कॉन्फिग कुछ / var / log / mysql में कुछ करने के रूप में दिखा रहा है
कारमेन

आपके उबंटू सेटअप में दैनिक क्रॉन जॉब्स दिन के किस समय चलती हैं? आपको /etc/crontabफ़ाइल में वह जानकारी मिल सकती है , जिसके साथ समाप्त होती है /etc/cron.daily )। हो सकता है कि आपने उस दिन के लिए क्रोन दैनिक नौकरियों के बाद पहले से ही लॉगरोटेट कॉन्फिगर बनाया हो?
रिकमारिक्स

जवाबों:


47

एक सामान्य समस्या यह है कि जब आप पहली बार एक दैनिक logrotate.d प्रविष्टि सेट करते हैं, तो यह पहले दिन को घुमाएगा नहीं। जब आप समय-आधारित रोटेशन (दैनिक / साप्ताहिक / मासिक) का उपयोग करते हैं, तो लॉगोट्रोट अंतिम तिथि की तारीख की मुहर लगाता है, जिसमें फ़ाइल को /var/lib/logrotate/status(या /var/lib/logrotate.statusआरएचईएल सिस्टम पर) देखा जाता है।

स्क्रिब्ल्ड डेट भविष्य की संदर्भ तारीख बन जाती है, जिसका logrotateउपयोग 'दैनिक' रोटेशन की तुलना करने के लिए किया जाएगा। चूंकि डिफॉल्ट क्रोन जॉब प्रतिदिन चलता है, इसलिए यह आमतौर पर दैनिक नौकरियों में एक समस्या है।

आप इस समस्या से दो तरह से बच सकते हैं;

  1. रन sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • यह स्थिति फ़ाइल में दिनांक स्क्रिबल करेगा और लॉग को घुमाएगा

  2. संपादित करें /var/lib/logrotate/statusऔर मैन्युअल रूप से लाइन जोड़ें:

    "/var/log/my_special.log" 2013-4-8

    • इसे आज या पूर्व की तारीख पर सेट करना। अगली बार इसे चलाने का कारण बनना चाहिए।

एक चैंपियन की तरह काम करता है!
सेठ

6
वास्तव में इसका उपयोग करते समय लॉग को घुमाता है -f(कम से कम मेरे आरएच व्युत्पन्न पर)।
बफ

12
-f-dडिबग के लिए फोर्स रोटेशन के लिए, डिबग का मतलब सूखा रन भी है, इसलिए वास्तव में इसमें कोई बदलाव नहीं किया जाएगा -d
ThorSummoner

1
-dशुष्क रन को लागू करना एक मुश्किल है। कोई परिवर्तन नहीं किया जा रहा था, और जब तक मुझे इस तथ्य का एहसास नहीं हुआ, तब तक मैं अपना सिर खुजलाता रहा।
आर्टेम रसाकोवस्की

5

निम्नलिखित स्लाइसहोस्ट लेख के अनुसार:

उबंटू पर लॉगराट को समझना - भाग 2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/statusफ़ाइल " पिछली लॉग फ़ाइल घुमाए जाने के बारे में जानकारी संग्रहीत करती है। " Logrotate मैनपेज का कहना है कि एक "राज्य फ़ाइल" कहा जाता है।

यहाँ ServerFault में एक और चर्चा है जो उपयोगी भी हो सकती है:

लॉगरोट बिल्कुल "दैनिक" कैसे संभालता है?

उस चर्चा में, "MadHatter", "स्थिति" (राज्य) फ़ाइल के बारे में निम्नलिखित के बारे में कहता है:

"प्रत्येक फ़ाइल में एक पंक्ति होती है, जो वह तिथि होती है जिस पर इसे अंतिम रूप से घुमाया जाता था; यदि आप ऐसी तिथि पर लॉगोट्रोट चलाते हैं, जो दी गई फ़ाइल रोटेशन के कारण होती है, तो वर्तमान तिथि और फ़ाइल में तिथि के बीच दिनों की संख्या दी जाती है ( 1 दैनिक के लिए, 7 साप्ताहिक के लिए, आदि), फ़ाइल घुमाई जाएगी। "

आशा है कि ये आपकी मदद करेगा।


0

यदि mysqladminउपयोगकर्ता या पासवर्ड की आवश्यकता होती है, तो वह इसे /root/.my.cnfबिना संशोधन के कॉन्फ़िगरेशन से नहीं पढ़ेगा ।

क्या हो रहा है यह देखने के लिए अपने आउटपुट को लकड़हारा तक पाइप करके देखें।

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

रोटेटिंग के बाद MySQL नई फाइल में त्रुटि नहीं करता है?

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