लॉग फ़ाइल का आकार बिना लॉग इन के रखें


13

क्या लॉग फ़ाइल के आकार को किसी नई खाली फ़ाइल द्वारा घुमाए बिना और पुरानी फ़ाइल को हटाने (या संग्रहित) करने का कोई तरीका है। उदाहरण के लिए, यदि मैंने लॉग फ़ाइल को अधिकतम आकार 1MB पर सेट किया है, तो उस सीमा से परे फ़ाइल आकार में वृद्धि के बाद यह स्वचालित रूप से क्लैंप हो जाएगा, पाठ को 'पूंछ' में जोड़ा जाता है और फ़ाइल का आकार 1MB रखने के लिए पाठ का सबसे पुराना भाग पॉप आउट किया जाता है ।


rm -f *.tar.gz.*
logrotate का

1
क्या कोई विशेष कारण है कि आप लॉग को घुमाना नहीं चाहते हैं, या लॉगरोटेट का उपयोग करना चाहते हैं? वास्तव में आप क्या होना चाहते हैं? 1M पर पुराने लॉग को संग्रहीत करें और एक नई शुरुआत करें? आपके प्रश्न का प्रारंभ अंत के साथ बिल्कुल संगत नहीं है।
डेविड थॉर्नले

पॉप आउट का क्या मतलब है?
tshepang

जवाबों:


4

ऐसा करने के लिए आप थोड़ी बैश स्क्रिप्ट लिख सकते हैं। फ़ाइल का उपयोग करके tail -cओवरराइट गिनती करने के लिए बस फ़ाइल को पूंछें और फ़ाइल को अधिलेखित करें।

से man tail:

-c, --bytes=N
              output the last N bytes; alternatively, use +N to  output  bytes
              starting with the Nth of each file

   If  the  first  character of N (the number of bytes or lines) is a `+',
   print beginning with the Nth item from the start of each  file,  other‐
   wise, print the last N items in the file.  N may have a multiplier suf‐
   fix:  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M   1024*1024,   GB
   1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

3
मुझे पूरा यकीन है कि एक बार जब आप "फाइल को ओवरराइट कर देंगे" तो लॉगिंग नई फाइल पर अपने आप फिर से शुरू नहीं होगी।
स्टीफन जज़्दवेस्की

0

आपका एकमात्र समाधान हो सकता है कि आप अपने स्वयं के उपयोगकर्ता फ़ाइल सिस्टम को लिखें या किसी मौजूदा में योगदान करें। उपयोक्ता में फाइलसिस्टम में आंशिक सूची देखें

यदि आपके पास योगदान करने का कौशल नहीं है, तो आप के लिए इसे जोड़ने के लिए एक परियोजना प्रचार या $ $ $ या दोनों की पेशकश करें।

काश मेरे पास ऐसा करने का समय होता, मैं हमेशा से कुछ ऐसा ही चाहता था।


0

आप एक FIFO का उपयोग करके कुछ ऐसा कर सकते हैं, जो एक शून्य-बाइट आकार फ़ाइल की तरह है।

हालाँकि, ध्यान दें कि यदि इस फ़ाइल से कुछ भी नहीं निकल रहा है, तो syslog प्रक्रिया अवरुद्ध हो सकती है, और आपके सभी लॉगफ़ाइल्स पर लिखना बंद कर देगी। मुझे यकीन नहीं है कि यह व्यवहार उबंटू / सेंटो के नए संस्करणों के साथ बदल दिया गया है।

एक उदाहरण यहाँ

एक अन्य उदाहरण के लिए, कुछ इस तरह का प्रयास करें।

अपना FIFO बनाएं:

sudo mkfifo /var/log/everything.fifo

और इसे (r) syslog.conf में जोड़ें, फिर syslog को पुनरारंभ करें:

*.*     |/var/log/everything.fifo

फिर एक खिड़की से फीफो देखें:

cat /var/log/everything.fifo

और दूसरी विंडो में, कुछ सामान भेजें

logger Test1
logger Test2
logger Test3

आपको catऊपर के आउटपुट में "टेस्ट *" लाइनें देखनी चाहिए ।

यह सुविधा डिबगिंग के लिए बहुत अच्छी हो सकती है, खासकर यदि आप डेटा को अधिक समय तक रखने की परवाह नहीं करते हैं। उदाहरण के लिए, यदि आप केवल thefirewall स्पैम को छोड़कर सब कुछ देखना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं:

grep -vi "kernel: .* on wan" /var/log/everything.fifo

0

यहाँ मेरा दूसरा जवाब है। यह एक बहुत ही हैकिश है।

बार-बार निष्पादित करने के लिए घड़ी (1) का उपयोग करें ( tail --bytes=1024लॉगफाइल के अंतिम 1024 बाइट्स, इस जवाब के लिए @jjclarkson को धन्यवाद)।

watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch

और फिर फ़ाइल को इसके साथ देखें:

less --raw-control-chars /tmp/messages.watch

watchऔर थोड़ी देर के बीच का अंतर यह है कि watchकेवल /tmp/messages.watch को अपडेट करेगा यदि / / var / log / संदेशों में परिवर्तन थे।

while true; do
    tail --bytes=1024 /var/log/messages > /tmp/messages.watch
    sleep 1
done

और अच्छी तरह से, मुझे लगता है कि आप testथोड़ी देर के लूप में रख सकते हैं ताकि पूंछ को केवल निष्पादित किया जाए यदि / var / log / संदेश अपडेट किए गए थे, लेकिन मैं अब इसका पता नहीं लगाऊंगा।


0
 * prune - में वर्णित फ़ाइलों की सूची में सबसे ऊपर क्लिप
 * फ़ाइल / आदि / डिफ़ॉल्ट / prune। समय-समय पर चलाने के लिए डिज़ाइन किया गया
 * क्रोन से, विचार स्वचालित रूप से लॉग को छोटा करने के लिए है
 * फाइलें जो हमेशा के लिए बढ़ती हैं। इस फ़ाइल में एक सूची है
 * फ़ाइलें (पूर्ण पथनाम), और ब्लॉक की संख्या
 * बनाए रखा जाना चाहिए। कुछ पवित्रता को बनाए रखने के लिए, prune होगा
 * अगली न्यूलाइन के बाद फाइल को क्लिप करें। फ़ाइल
 * आदि / डिफ़ॉल्ट / prune कुछ इस तरह दिखना चाहिए:
 *
 * usr / प्रशंसा / aculog 10
 * औसर / अदाम / एल.लोग 5
 * usr / तारीफ / संदेश 200
 * usr / प्रशंसा / sup_log 5
 *
 * Prune के लिए infoswx पर crontab प्रविष्टि इस तरह दिखता है:
 *
 * * ५ * * * / / आदि / प्रून> /rr/adm/prune.log २> & १
 *
 * के साथ संकलन: cc -O -o prune prune.c
 *
 * निम्नलिखित परिभाषित अपने स्वाद के अनुरूप समायोजित किया जा सकता है
 * और आपका सिस्टम ब्लॉक आकार।
 *
 * रे डेविस infoswx! मधुमक्खियों 09/25/85

https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=en&ie=UTF-8&q=prune+log+file&pli=1

कई (सबसे सभी?) डेमॉन अपनी लॉग फाइल को फिर से खोलेंगे अगर HUP सिग्नल (उदाहरण के लिए प्रून चलाने वाली समान क्रॉन जॉब) भेजा जाए


0

मुझे यकीन है कि मूल पोस्टर ने 8 साल बाद एक समाधान ढूंढ लिया है। यहाँ अन्य लोगों के लिए एक और है जो इस धागे को पढ़ सकता है ...

वक्र एक प्रोग्राम के आउटपुट के आकार को सीमित करता है और अंतिम कमांड के साथ अंतिम 200MB आउटपुट को संरक्षित करता है:

run_program | curtail -s 200M myprogram.log

https://github.com/Comcast/Infinite-File-Curtailer

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