क्या लॉग्स को साफ़ करने का एक उचित तरीका है?


64

मैं सोच रहा था कि क्या सामान्य रूप से लॉग को साफ़ करने का एक उचित तरीका था?

मैं उबंटू में नया हूं और पोस्टफिक्स को स्थापित करने की कोशिश कर रहा हूं। सवाल में लॉग है /var/log/mail.log। मैं सोच रहा था कि क्या मेरे पास इसमें जाने के बजाय, इसे साफ करने और सभी लाइनों को हटाने और इसे बचाने का एक सही तरीका था। मुझे लगता है कि लॉग क्लीयर करने और उसे सहेजने के तुरंत बाद कभी-कभी त्रुटियां उस पर नहीं लिखी जातीं।

साइड नोट: मुझे पोस्टफ़िक्स को स्थापित करने में परेशानी हो रही है और मैं लॉग्स को पढ़ने के लिए यह आसान बनाने की कोशिश कर रहा हूं कि उम्मीद है कि यह मेरी मदद कर सकता है, इसके बजाय सभी तरह से नीचे स्क्रॉल करने के लिए।


2
यदि आप फ़ाइल का अंत देखना चाहते हैं तो पूंछ आपका मित्र है। अंतिम 5 पंक्तियों को प्रदर्शित करने के लिए tail /var/log/mail.log। फ़ाइल के अंत में लिखी गई सभी लाइनों को देखने के लिए tail -f /var/log/mail.log।
user9517

जवाबों:


79

आप उपयोग कर सकते हैं:

> /var/log/mail.log

आप फ़ाइल को संपादित करने के बिना लॉग को छोटा कर देगा। यह अंतरिक्ष को वापस पाने का एक विश्वसनीय तरीका भी है। कभी-कभी लोग लॉग पर आरएम का उपयोग करने की गलती करते हैं, फिर फ़ाइल नाम को फिर से बनाते हैं, यदि किसी अन्य प्रक्रिया में फ़ाइल खुली है, तो आपको उस स्थान को वापस नहीं मिलता है जब तक कि यह प्रक्रिया बंद नहीं हो जाती है और यह आपको अनुमति देता है।

यदि आप लॉग की सामग्री देख रहे हैं, तो आप tailकमांड का उपयोग करना चाहते हैं :

tail -f /var/log/mail.log

Ctrl-C टेलिंग को तोड़ देगा।


2
/bin/csh(FreeBSD के लिए आम) "अवैध नल कमांड" के साथ इसे जमानत देगा, इस बीच zsh(के लिए लोकप्रिय प्रतिस्थापन bash) ईओएफ का इंतजार करेगा। देखें serverfault.com/a/381380/67675
poige

मैं इसे कैसे शेड्यूल कर सकता हूं? डाल >crontab में वाक्य रचना के रूप में यह रूप में एक वाक्य रचना में पहचान नहीं कर किया जा सकता है नहीं चल रहा है
ishandutta2007

26

हां, एक उचित तरीका है: आप लॉग को बिल्कुल साफ नहीं करते हैं । आप उन्हें घुमाएँ । रोटेशन में एक ही नाम के तहत लॉग आउटपुट को एक नई फ़ाइल में बदलना शामिल है, पिछले एन लॉग फाइल के साथ एन संबंधित फाइलनाम के सेट के तहत रखा गया है।

कैसे एक घुमाता लॉग निर्भर करता है कि कैसे एक उन्हें पहली जगह में लिख रहा है। यह एक बार-बार देखा जाने वाला बिंदु है। यहाँ कुछ उत्तर कम से कम उस पर स्पर्श करते हैं, जिसमें उल्लेख है कि कुछ लॉगिंग प्रोग्राम लॉग फ़ाइल के लिए एक ओपन फ़ाइल डिस्क्रिप्टर रखते हैं, इसलिए बस फ़ाइल को हटाने से स्पेस खाली नहीं होगा, या वास्तव में आउटपुट को एक ताज़ा लॉग फ़ाइल में भी स्विच कर सकता है।

यदि इस कार्यक्रम लॉग फ़ाइल लेखन है multilogसे daemontoolsपैकेज कोई मैन्युअल लिपियों, कोई - उदाहरण के लिए, तो तुम सब पर लॉग बारी बारी से करने कुछ भी नहीं करते cronनौकरियों। सीधे शब्दों में कहें multilogकि लॉग आउटपुट एक निर्देशिका के लिए है, और यह स्वयं उस निर्देशिका में एन लॉग फ़ाइलों के स्वचालित रूप से घुमाए गए और आकार-कैप सेट को बनाए रखेगा।

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

यदि आप rsyslogलॉग फ़ाइलों को लिखने के लिए उपयोग कर रहे हैं , तो लॉग फ़ाइल को एक निश्चित आकार तक पहुंचने और स्क्रिप्ट चलाने के बाद लॉगिंग प्रोग्राम को बंद करने के लिए कहा जा सकता है । आपको स्क्रिप्ट का मांस लिखना होगा, वास्तव में लॉग फ़ाइल का नाम बदलना होगा और कुल आकार की बाधाओं के आधार पर पुरानी लॉग फ़ाइलों को हटाना होगा, लेकिन कम से कम लॉगिंग प्रोग्राम ने फ़ाइल को बंद कर दिया है और लॉग राइटिंग को रोका जा रहा है जबकि ऐसा हो रहा है।

syslogdघूर्णन लॉग का पुराना तरीका, अभी भी syslog- एनजी जैसे कार्यक्रमों को लॉग इन करके और जैसा कि यहां एक अन्य उत्तर में logrotateउल्लिखित है djangofan, जैसे टूल द्वारा उदाहरण के लिए अपेक्षित है , कुछ हद तक अधिक खतरनाक है। कोई एक cronकार्य चलाता है जो समय-समय पर लॉग फ़ाइलों का नाम बदल देता है, और लॉगिंग डेमॉन को पुनरारंभ करता है (जो भी डेमॉन पर्यवेक्षक इसे चला रहा है) का उपयोग करके। इसके साथ समस्या यह है कि यह समग्र आकार की टोपी को लागू नहीं करता है। धीमे सप्ताहों में किसी को N बहुत छोटी दैनिक लॉग फ़ाइलें मिल सकती हैं, जबकि व्यस्त दिनों में कोई 1 बहुत बड़ी लॉग फ़ाइल प्राप्त कर सकता है जो आकार सीमा से अधिक अच्छी तरह से है।

यही कारण है कि जैसे बाद में और बेहतर उपकरण है multilogऔर svlogdफ़ाइल आकार विन्यास विकल्प हैं और वास्तव में जाँच लॉग फ़ाइल के लिए खुद को आकार, निश्चित रूप से। दुनिया ने यह जान लिया है कि cronनौकरियों के साथ एक समय पर लॉग्स को प्रदूषित करना, या यहां तक ​​कि एक logrotateडेमॉन, आकार गलत होने के लिए खिड़कियां छोड़ देता है, और यह कि इन जांचों के लिए उचित जगह है, और इसलिए व्यवस्थापक-परिभाषित आकार के कैप को सख्ती से लागू करें लॉग फ़ाइलें कभी भी उस विभाजन को नहीं निगलती हैं जो वे चालू हैं, उस प्रोग्राम में है जो वास्तव में पहले स्थान पर फ़ाइलों को लिख रहा है।


Rsyslog के लिए, इसे आसानी से कॉन्फ़िगर किया जा सकता है ताकि उदाहरण के लिए, YEAR, MONTH और DAY सहित "पैटर्न" द्वारा वर्णित फ़ाइल नाम पर भरोसा किया जा सके। यह एक template(name="DYNmail" type="string" string="/var/log/%$YEAR%/%$MONTH%/%$DAY%/mail.log")निर्देश के रूप में आसान है , एक के बाद if ($syslogfacility-text == 'mail') then -?DYNmail;TraditionalFormat। इस तरह, लॉग-रोटेशन केवल एक गैर-समस्या है, कम से कम जब एक फ़ाइल प्रति दिन ठीक है। लॉग के बहुत अधिक मात्रा के लिए (प्रति दिन कई रोटेशन की आवश्यकता होती है), वहाँ $HOURभी है।
दामियानो वेरज़ुल्ली

13

आप भी इस का उपयोग कर सकते हैं ..

truncate /opt/package/logs/*.log --size 0

यहां / ऑप्ट / पैकेज / लॉग में सभी लॉग फाइलें खाली हो जाएंगी।


मैं यह नहीं देखता कि पुराने उत्तरों की तुलना में यह कैसे बेहतर हो सकता है।
कैस्परल्ड

4
यह वास्तव में एक बहुत अच्छा जवाब है, और वास्तव में केवल एक ही है जो सीधे सवाल का जवाब देता है कि क्या लॉगफ़ाइल्स को कम करने का एक उचित तरीका है। यह अन्य उत्तरों की तुलना में बेहतर है कि लॉगफाइल को डिलीट नहीं करता है, यह सामग्री को ठीक से शून्य करता है, इस प्रकार त्रुटियों की अनुमति देता है और लॉगफाइल्स को गायब कर देता है जिसके कारण कुछ डेमॉन इस मामले में घबराएंगे नहीं।
hmedia1

11

हां, लिनक्स के लिए एक उपकरण है जिसे लॉगरोटेट कहा जाता है ।


9
बस एक छोटा सुधार: यह एक सेवा नहीं है, यह एक उपकरण है, आमतौर पर क्रोन सेवा से चल रहा है।
RVs

10

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

cat /dev/null > /path/to/logfile

# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done

3
पुनरावर्ती लॉग फ़ाइलों को साफ़ करने के लिए:for i in $(find /var/log -type f); do cat /dev/null > $i; done
Iurie Malai

4

संक्षिप्त और संगत सामग्री ओवरराइटिंग: : > /dest/file

लेकिन truncateकई * NIX'es पर ट्रंकट (2) सिस्टम कॉल और संबंधित उपयोगकर्ता उपकरण भी है ।


1

यदि आप फ़ाइल को साफ करने से पहले रखना चाहते हैं, तो आप कर सकते हैं:

cp /var/log/mail.log /var/log/mail.log.1 && echo -n "" > /var/log/mail.log

यदि आप लॉग में किसी विशिष्ट पाठ या ईमेल की खोज करना चाहते हैं तो आप grep का उपयोग कर सकते हैं। यदि आप मेल उपयोग के बारे में कुछ ग्राफिक्स रखना चाहते हैं तो आप AWStats का उपयोग कर सकते हैं।


1

यहां बताया गया है कि मैं इसे कैसे करता हूं, और यह सिर्फ एनजीआईएनएक्स के लिए है, आप इसे सभी लॉग फ़ाइलों पर काम करने के लिए निकाल सकते हैं।

# Clear nginx logs.
# @usage delnginxlogs
function delnginxlogs() {
  echo "--------------- ⏲  Clearing logs... ---------------"

  # Clear logs.
  for i in /var/log/nginx/*; do cat /dev/null > $i; done

  echo "--------------- ⏲  Deleting .gz log files... ---------------"

  # Delete .gz files.
  find /var/log/nginx -type f -regex ".*\.gz$" -delete

  echo "--------------- 💯 DONE: NGINX logs cleared ... ---------------"
}

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