मेरे कंसोल को बाढ़ने से कर्नेल संदेश कैसे रोकें?


45

मैं Centos 6, rsyslog लॉगिंग का उपयोग कर रहा हूं। कंसोल कर्नेल संदेशों से भरा हुआ है।

  • Klogd नहीं चल रहा है (मैं rsyslog का उपयोग कर रहा हूं)
  • रूपलॉग कॉन्फिगरेशन कंसोल को कुछ भी निर्देशित नहीं करता है
  • यहां तक ​​कि rsyslog को पूरी तरह से रोकने की कोशिश की गई

अभी भी कुछ कर्नेल लॉग संदेशों के साथ मेरे कंसोल को भर रहा है। यह क्या है और मैं इसे कैसे रोकूं?

अद्यतन : ये कर्नेल (हार्डवेयर, iptables, आदि) द्वारा उत्पन्न संदेश हैं /proc/kmsg, जो इस तरह से बाहर जाता है, सामान :

Shorewall: pub2loc: DROP: IN = br0 OUT = MAC = xxx SRC = xxx DST = xxx LEN = 60-24 = 0x00 PREC = 0x00 TTL = 128 ID = 15731 DFTTO = TCP SPT = 63767 DPT = 3493 विन्डोज़ = 8192 RES = 8192 RES 0x00 SYN URGP = 0


संदेश क्या दिखते हैं? (व्यक्तिगत रूप से, मैं आम तौर पर एक xtermविंडो में काम करता हूं , इसलिए यदि कंसोल में बाढ़ आ गई है तो यह मुझे परेशान नहीं करता है।)
कीथ थॉम्पसन

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

@KeithThompson: संदेश कर्नेल लॉगिंग तंत्र के माध्यम से आ रहे हैं। Shorewall इन संदेशों का केवल एक निर्माता है (iptables कर्नेल मॉड्यूल के माध्यम से), सबसे कष्टप्रद एक है, लेकिन सभी कर्नेल-जनित संदेश वहां दिखाए जाते हैं।
ha

जवाबों:


27

मेरा सुझाव है कि आप अपना परिवर्तन करें /etc/sysctl.conf। विशेष रूप से, आप कर्नेल.प्रिंट लाइन को ट्विक करना चाहते हैं ।

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

मुझे यकीन नहीं है कि सेंटो डिफॉल्ट सेटिंग्स क्या हैं, लेकिन मुझे लगता है कि चीजें अधिक वर्बोज़ सेट कर चुकी हैं, फिर आपको ज़रूरत है।

लॉगिंग पर भी shorewall अनुभाग देखें । आपको लॉगिंग के लिए लॉग लक्ष्य का उपयोग करने की आवश्यकता नहीं है, आप अन्य टूल का उपयोग कर सकते हैं, या जहां आप संदेश जाते हैं, उसे नियंत्रित करने के लिए लॉग गंभीरता को समायोजित करें और चीजों को ट्वीक करें।


32

रनटाइम पर मान सेट करने के लिए, उपयोग करें sysctl। (मुझे लगता है कि कोई व्यक्ति /proc/sys/kernel/printkसीधे भी लिख सकता है और जाहिर तौर पर आप यहाँdmesg -n CUR वर्णित के रूप में भी उपयोग कर सकते हैं )

प्रदर्शित करें:

# sysctl kernel.printk
kernel.printk = 2       4       1       7

आउटपुट में विभाजक एकल टैब, btw हैं।

सेट। यहाँ विभाजक केवल रिक्त स्थान हैं। साथ ही काम करता है।

# sysctl -w kernel.printk="2 4 1 7"
kernel.printk = 2 4 1 7
# sysctl kernel.printk
kernel.printk = 2       4       1       7

man sysctlअधिक के लिए "रनटाइम पर कर्नेल पैरामीटर कॉन्फ़िगर करें" देखें ।

का रिमाइंडर गंभीरता का स्तर और ऊपर ब्रायन द्वारा दिए गए kernel.printk के चार मान:

  • CUR = वर्तमान गंभीरता स्तर; इस स्तर से अधिक महत्वपूर्ण केवल संदेश मुद्रित होते हैं
  • DEF = बिना किसी स्तर के संदेशों को दी गई डिफ़ॉल्ट गंभीरता स्तर
  • न्यूनतम = न्यूनतम स्वीकार्य CUR
  • BTDEF = बूट-टाइम डिफ़ॉल्ट CUR

मेरे CentOS पर: 7 4 1 7

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            x              x
4 - warning          x    x         x
5 - notice           x              x
6 - informational    V              V
7 - debug            

यह बहुत शोर है, मैं सिर्फ आलोचना करना चाहता हूं और कोई त्रुटि नहीं है। गैर-सूचीबद्ध संदेशों को चेतावनी के रूप में माना जाना चाहिए, इसलिए DEF अच्छा है:

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            V              V
4 - warning               x         
5 - notice                           
6 - informational                   
7 - debug            

सेट करें: 3 4 1 3


4
man klogctlस्तरों की भी व्याख्या करता है।
सिरो सेंटिल्ली 新疆 改造 i i 事件

12

मुझे यह मददगार लगा। आरएचईएल आधारित विकृतियों पर आप cat /proc/sys/kernel/printkदेख सकते हैं कि आपकी वर्तमान सेटिंग्स क्या हैं।

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

कंसोल लैगवेल को सेट करने के लिए / etc / sysconfig / init में LOGLEVEL पैरामीटर का उपयोग अब समर्थित नहीं है। Red Hat Enterprise Linux 6 में कंसोल लॉजेल सेट करने के लिए, loglevel = 'को बूट समय पैरामीटर के रूप में पास करें। उदाहरण के लिए, loglevel = 6 सभी संदेशों को 6 से कम (केवल बराबर से कम नहीं) प्रिंट करेगा।

को श्रेय:


6

रेडहैट के अनुसार , इसे करने का "आधिकारिक" तरीका है :

Red Hat Enterprise Linux 6 में कंसोल लॉजेल सेट करने के लिए, loglevel = <नंबर> को बूट समय पैरामीटर के रूप में पास करें।


6

आप अस्थायी रूप से सभी कर्नेल लॉगिंग का उपयोग करके कंसोल को दबा सकते हैं:

sudo dmesg -n 1

इन्हें भी देखें: https://askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin


1
जैसा मुझे चाहिए था यह बिल्कुल वैसा ही है! मैं सिर्फ एक टर्मिनल में संदेशों को अस्थायी रूप से अक्षम करना चाहता था जबकि मैं उस समस्या को डीबग करता हूं जो उन्हें पैदा कर रहा है।
ntc2

0

आप जो देख रहे हैं, वह कर्नेल लॉग संदेश कंसोल पर मुद्रित है। कंसोल पर कौन से लॉग संदेश पहुँचते हैं यह वर्तमान में सेट कंसोल लॉग स्तर पर निर्भर करता है।

जब कर्नेल cmdline में quietकर्नेल पैरामीटर शामिल होता है जिसके परिणामस्वरूप कंसोल लॉग स्तर होता है 4(यानी त्रुटियां और बदतर)। इसके बिना यह 7(यानी जानकारी और बदतर) के लिए सेट है ।

आप के साथ सक्रिय कर्नेल पैरामीटर देख सकते हैं cat /proc/cmdlineऔर आपके वर्तमान कंसोल लॉग स्तर के साथ sysctl kernel.printk। इसे गतिशील रूप से dmesg -n X(या इसके साथ भी sysctl -w) बदला जा सकता है ।

परिवर्तन को स्थायी बनाने के लिए आप कर्नेल cmdline (जैसे quiet/ और / loglevel=X) में कर्नेल पैरामीटर जोड़ सकते हैं या .confनीचे एक sysctl फ़ाइल जोड़ सकते हैं /etc/sysctl.d

कर्नेल पैरामीटर को इस तरह जोड़ा जा सकता है:

# vi /etc/default/grub # edit the GRUB_CMDLINE_LINUX value
# for i in /boot/grub2/grub.cfg /boot/efi/EFI/*/grub.cfg; do
     [ -f "$i" ] && grub2-mkconfig -o "$i" ; done

0

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

यदि आप एक कंसोल में हैं और यह भी नहीं देख सकते हैं कि संदेशों के कारण आप क्या कर रहे हैं तो यह टाइप करने का प्रयास करें।

सुडो dmesg -D

इसे अन्य समाधानों को देखने के लिए पर्याप्त शांत करना चाहिए।


-1

यदि आप एक वास्तविक जाम में हैं, तो आप बस अस्थायी रूप से इस मामले में syslog सेवा को निष्क्रिय कर सकते हैं कि ऐसी बाढ़ आती है जिसे आप ठीक से देख या टाइप नहीं कर सकते।


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