logrotate / var / log / संदेश को संपीड़ित नहीं करता है


11

समय के साथ मैंने कुछ लॉग को देखा /var/logजैसे कि auth, kernऔर messagesबहुत बड़ा हो रहा था। मैंने logrotateउनके लिए प्रविष्टियाँ बनाईं :

$ cat /etc/logrotate.d/auth.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/kern.log 
/var/log/kern.log {
    rotate 5
    daily
}
$ cat /etc/logrotate.d/messages 
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

मेरे पास भी compressविकल्प सक्षम है:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

यह उन लोगों के लिए बहुत अच्छा काम करता है auth.log, kern.logऔर अन्य, जिसका अर्थ है कि उनमें से प्रत्येक लॉग को पिछले 5 दिनों के लॉग को बनाए रखने के साथ gzipped और घुमाया गया है। /var/log/messagesहालाँकि , संपीड़ित नहीं किया जा रहा है, जिसके परिणामस्वरूप लॉग के 5 दिनों से अधिक हो सकता है:

$ ls /var/log/messages*
/var/log/messages           /var/log/messages-20100213
/var/log/messages-20100201  /var/log/messages-20100214
/var/log/messages-20100202  /var/log/messages-20100215
/var/log/messages-20100203  /var/log/messages-20100216
/var/log/messages-20100204  /var/log/messages-20100217
/var/log/messages-20100205  /var/log/messages-20100218
/var/log/messages-20100206  /var/log/messages-20100219
/var/log/messages-20100207  /var/log/messages-20100220
/var/log/messages-20100208  /var/log/messages-20100221
/var/log/messages-20100209  /var/log/messages-20100222
/var/log/messages-20100210  /var/log/messages-20100223
/var/log/messages-20100211  /var/log/messages-20100224
/var/log/messages-20100212

जैसा कि ServerFault के एक अन्य logrotateप्रश्न में बताया गया है , पुराने लॉग हैं (सबसे अधिक संभावना है) को हटाया नहीं जा रहा है क्योंकि फ़ाइल की समाप्ति प्रत्येक फ़ाइल के लिए अलग है। यह प्रतीत होता है क्योंकि फ़ाइलों को gzipped नहीं किया जा रहा है।

मैं /var/log/messagesअपने सभी अन्य लॉग फ़ाइलों की तरह पिछले 5 दिनों की लॉग्स के साथ संपीड़ित और घुमाए जाने के लिए क्या कर सकता हूं ? मुझे किसकी याद आ रही है?

EDIT 1 : पहले जोड़े के जवाब में अनुरोध की गई अतिरिक्त जानकारी।

मैं जेंटू लिनक्स चला रहा हूं। मेरी /etc/logrotate.confफ़ाइल:

$ cat /etc/logrotate.conf 
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
compress
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

/etc/logrotate.d उन पैकेजों द्वारा स्थापित mysql, rsync, इत्यादि के लिए विन्यास के साथ-साथ मेरे कस्टम विन्यास फाइल शामिल हैं।

मेरी जड़ crontabखाली है:

$ sudo crontab -l
no crontab for root

मैं सब /etc/cron.{daily,hourly,monthly,weekly}कुछ संबंधित syslog के लिए जाँच की , और वहाँ एक स्क्रिप्ट है जो घूमता है /var/log/syslogऔर /var/log/auth.log

इसके बाद, मैंने CarpeNoctem द्वारा सुझाए गए /var/log/messages-only logrotateconfig फ़ाइल बनाई:

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

फिर मैं logrotateस्वयं भाग गया :

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
        /bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

ऊपर दिए गए लॉग के अनुसार, logrotateलॉग को / bin / gzip के साथ संपीड़ित करें, लेकिन मुझे एक संकुचित संदेश फ़ाइल दिखाई नहीं देती है /var/log। इसके अलावा, पुरानी घुमाए गए फ़ाइलों के लिए ग्लोबिंग विफल रहा।

EDIT 2 : पुरानी फ़ाइलों में प्रत्यय लगाने के logrotateबाद रन का डिबग आउटपुट जोड़ना ।.gz/var/log/message-*

हम शुरू करते हैं:

$ ls /var/log/messages*
/var/log/messages              /var/log/messages-20100222.gz
/var/log/messages-20100219.gz  /var/log/messages-20100223.gz
/var/log/messages-20100220.gz  /var/log/messages-20100224.gz
/var/log/messages-20100221.gz

फिर logrotateहमारे कस्टम कॉन्फ़िगरेशन फ़ाइल के साथ चलाएँ :

$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages 

Handling 1 logs

rotating pattern: /var/log/messages  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
  log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation

इस बार, logrotateग्लोब सफल हो गया है और इसे हटाने का इरादा रखते हुए छठे संपीड़ित लॉगफाइल को ढूंढता है। फ़ाइल को वास्तव में हटाया नहीं गया है; मुझे लगता है कि क्योंकि हम डिबग मोड में चल रहे हैं।

मैं उत्सुक हूं कि क्या delaycompressविकल्प को सक्षम करने /var/log/messagesसे मदद मिलेगी। मैंने इसे सक्षम किया और अगली सुबह परिणामों की जांच करेगा।


क्या आप अपना logrotate.conf पोस्ट कर सकते हैं? अब तक आपके द्वारा साझा किए गए अंशों में कुछ भी उन संदेशों की फाइलों पर तारीख प्रत्यय की व्याख्या नहीं करेगा। Logrotate का उपयोग घुमाए गए लॉग फ़ाइलों पर दिनांक प्रत्ययों का समर्थन करने के लिए नहीं किया गया था। यह मुझे विश्वास दिलाता है कि कुछ और पूरी तरह से उन फाइलों को बना रहा है। यह देखने के लिए कि क्या आपके पास एक और स्क्रिप्ट है उसी कार्य को करने की कोशिश करने के लिए / etc / crontab, root का crontab और /etc/cron.daily चेक करें।
jmtd

इसके अतिरिक्त, क्या आप हमें बता सकते हैं कि आपके द्वारा चलाए जा रहे लिनक्स का क्या वितरण है? डेबियन / उबंटू की अपनी लॉग रोटेशन स्क्रिप्ट है जो आपके लॉगोटेट सामान को मूक कर सकती है।
thepocketwade

उत्तर के लिए धन्यवाद। मैं जेंटू लिनक्स चला रहा हूं। मेरे crontabs / var / log / संदेश का कोई प्रबंधन नहीं कर रहे हैं। कृपया विवरण के लिए मेरे प्रश्न में नई जानकारी देखें।
माइक मजूर

जवाबों:


8

समस्या delaycompressको /var/log/messagesहल करने के लिए कॉन्फ़िगरेशन अनुभाग में जोड़ना ।

से man logrotate:

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

मुझे लगता है sysklogd, मेरे syslog डेमॉन को अपने लॉगफाइल को बंद करने के लिए नहीं कहा जा सकता है, और इस तरह यह आवश्यक है।

दिलचस्प बात यह है कि मूल विन्यास जो मेरे पास था ( delaycompressनिर्देश के बिना ), सीधे बाहर आया man logrotate(सिवाय मैं बदल weeklyगया daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

यह अज्ञात अज्ञात विकल्प कह रहा है 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf रीडिंग फ़ाइल /etc/logrotate.d/apc_rtbinfo.conf पठन जानकारी के लिए /mnt/log/frengo/apc_rtbinfo.log त्रुटि: /etc/logrotate.d/apc_rtbinfo.conf:7 अज्ञात विकल्प 'delalycompress' - लाइन हैंडलिंग 1 लॉग्स की अनदेखी
आशीष

# cat /etc/logrotate.d/apc_rtbinfo.conf/mnt/log/frengo/apc_rtbinfo.log {दैनिक अनुपलब्ध नोटिफ़ॉर्म साइज़ 2000M सेक डेलिलेकोम्प्रेस साझाकरण कॉपीरिपेट को घुमाएँ 3}
आशीष

1
ठीक है कि वहाँ त्रुटि "delalycompress" में टाइपो मिला था
आशीष

लेकिन अब मुद्दा यह है कि log.1 2000M से अधिक है # du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G/mnt/log/frengo/apc_rtbinfo.log .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151212 679M /mnt/log/frengo/apc_rtbinfo.log-2015121225.gz 681M / mnt / log / frengov /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-2015121228 70m/mnt/log/frengo/apc_rtbinfo। gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
आशीष

5

केवल इस जानकारी के साथ कहना मुश्किल है, लेकिन मैं आपको बता सकता हूं कि मुझे कुछ बार बचाया है।

Logrotate में एक डिबग विकल्प होता है जो प्रत्येक स्टेपआउट के लिए प्रत्येक चरण के प्ले-बाय-प्ले को प्रिंट करेगा। तो इस मामले में आप कर सकते हैं:

logrotate -d /etc/logrotate.conf

आउटपुट आपको बताएगा कि वास्तव में क्या चल रहा है। इसके अलावा, यदि आप डिबग आउटपुट को कम करना चाहते हैं तो आप कर सकते हैं

logrotate -d /etc/logrotate.d/messages

यद्यपि आप अस्थायी रूप से मुख्य logrotate.conf विकल्पों को उस फाइल में रखना चाहते हैं क्योंकि फ़ाइल को सीधे निर्दिष्ट करने का मतलब यह है कि उसने मुख्य कॉन्फ़िगरेशन विकल्पों को कभी नहीं पढ़ा होगा। व्यक्तिगत फ़ाइल को निर्दिष्ट करने का अर्थ यह भी है कि आप -fडिबग विकल्प के संयोजन में (बल) विकल्प का उपयोग कर संदेश फ़ाइल के वास्तविक रोटेशन पर एक नज़र डाल सकते हैं।


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

1
5 सबसे पुरानी संदेशों की फ़ाइलों का नाम बदलें ताकि वे एक .gz के साथ समाप्त हो जाएं और देखें कि क्या logrotate सबसे पुराना एक को हटा देता है जैसे इसे चाहिए। अगर ऐसा होता है तो हमें पता है कि गज़ब सही से नहीं चलने के कारण ग्लोबिंग फेल रहा है। यह कम से कम पुष्टि करेगा कि रोटेशन की कमी के लिए संपीड़न की कमी को दोष देना है।
कारपेक्टेक्ट

हो गया, विवरण ऊपर दिए गए प्रश्न में जोड़ा गया। मैं उत्सुक हूं कि क्या लाइव /var/log/messagesफ़ाइल के साथ कुछ विवाद मुद्दा है और delaycompressविकल्प मदद करेगा।
माइक मजूर

एक और दिलचस्प बात जो मुझे पता चली। जब आप -d विकल्प को सक्षम करते हैं, तो लॉग फाइल को लॉग इन नहीं करेगा। अधिक जानकारी के लिए मैनुअल की जाँच करें। -d, --debug Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
सीबीआर

1

अपने logrotate.conf में इस सेटिंग को आज़माने पर विचार करें:

dateformat .%Y%m%d

और डैश के बजाय डॉट का उपयोग करने के लिए अपनी मौजूदा संदेश फ़ाइलों का नाम बदलें। फिर अपने लॉगोट को फिर से आज़माएं।

नीचे दिए गए सुरागों ने मुझे विश्वास दिलाया कि अगर यह किसी भी तरह से एक विकल्प के रूप में व्याख्या की जा रही है तो डैश विफल हो सकता है (जहां - इसे ठीक कर देगा)। इसका कोई मतलब नहीं है, लेकिन यह सिर्फ संभव हो सकता है।

dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed

मुझे नहीं लगता कि यह मूल कारण है। वर्तमान तिथि प्रारूप, डैश के साथ, अन्य लॉग फ़ाइलों के लिए ठीक काम करता है। उन लॉग फ़ाइलों के बीच का अंतर यह /var/log/messagesहै कि घुमाई गई /var/log/messagesफ़ाइलें संपीड़ित नहीं हैं।
माइक मजूर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.