घबराहट पर रिबूट करने के लिए लिनक्स कर्नेल को कैसे कॉन्फ़िगर करें?


13

आप सिस्टम को रिबूट करने के लिए कर्नेल कमांड लाइन पर "पैनिक = एन" डाल सकते हैं।

लेकिन क्या बूट लोडर एक नाटक में आने से पहले इसे निर्दिष्ट करने के लिए एक डिफ़ॉल्ट विकल्प है (डिफ़ॉल्ट कर्नेल कमांड लाइन विकल्प के अलावा)? कुछ कर्नेल विकल्प हो सकता है?


कर्नेल वॉचडॉग सबसिस्टम के माध्यम से, शायद?
गाइल्स का SO- बुराई पर रोक '17

विन्यास फाइल बूट (ग्रब) विन्यास फाइल ही है, क्योंकि यह बूट समय पर लाया गया पैरामीटर है और ग्रब को किसी अन्य कॉन्फिगर फाइल से पढ़ने की उम्मीद नहीं की जा सकती है जबकि फाइलसिस्टम आरोहित नहीं है।
निखिल मुले

मुझे लगता है कि आप एक अलग कर्नेल के लिए रिबूट करना चाहते हैं? बूटलोडर से कुछ सहयोग की आवश्यकता है, और उस बिंदु पर, आप निश्चित रूप से कमांड लाइन तर्क पारित करने में सक्षम होंगे। कुछ बूट लोडर को एक अलग कर्नेल में रिबूट करने के लिए सेट किया जा सकता है यदि बूट विफल हो जाता है (उपयोगकर्ता द्वारा प्रोग्राम करने से बूट लोडर को संकेत मिलता है कि बूट सफल हुआ)।
गाइल्स 'एसओ- बुराई को रोकना'

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

जवाबों:


2

ऐसा कॉन्फिग विकल्प नहीं लगता है। डिफ़ॉल्ट टाइमआउट 0 है जो http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 के अनुसार "हमेशा के लिए प्रतीक्षा करें" है।

विकल्प को कर्नेल / घबराहट में परिभाषित किया गया है । आप एक पैच लिख सकते हैं जो प्रारंभिक मूल्य को कुछ अलग करता है।

3 सेकंड के बाद रिबूट को हार्डकोड करने के लिए, बदलें:

int panic_timeout;

सेवा:

int panic_timeout = 3;

विशेष तंत्र होने पर स्रोतों से छेड़छाड़ करना खराब है: unix.stackexchange.com/a/517364/6622
poige

19

से man proc:

/ Proc / sys / कर्नेल / आतंक

यह फ़ाइल कर्नेल चर पैनिक_टाइमआउट को रीड / राइट एक्सेस प्रदान करती है। यदि यह शून्य है, तो कर्नेल घबराहट पर लूप करेगा; यदि नॉनजरो यह इंगित करता है कि कर्नेल को इस संख्या के सेकंड के बाद ऑटोरबूट करना चाहिए। जब आप सॉफ़्टवेयर वॉचडॉग डिवाइस ड्राइवर का उपयोग करते हैं, तो अनुशंसित सेटिंग 60 है।


मैं यहां कर्नेल कॉन्फिगर विकल्प की तलाश कर रहा हूं, न कि यूजरस्पेस से कुछ। विशेष रूप से, यदि किसी कारण से, यह रूट फाइल सिस्टम को माउंट नहीं कर सकता है (या किसी अन्य कारण से, यूजर्स कभी नहीं आता है), मुझे इसे रीबूट करने की आवश्यकता है।
शॉन जे। गोफ

@ ShawnJ.Goff यदि आप भी उपयोगकर्ताओं के ऊपर नहीं आने के बारे में चिंतित हैं, तो आप गलत सवाल पूछ रहे हैं (यदि कर्नेल घबराता नहीं है तो भी आप रिबूट करना चाहते हैं)। और उत्तर परिभाषा द्वारा प्रहरी का एक रूप है; आपको वॉचडॉग सबसिस्टम को सक्रिय करने की आवश्यकता है ( /dev/watchdogथोड़ी देर में छुआ नहीं गया है तो रिबूट को ट्रिगर करना )। देखते हैं Documentation/watchdog/watchdog-api.txt
गिल्स एसओ- '

1
हां, मेरे पास एक प्रहरी है। मैं बस संभव के रूप में कई सुरक्षा जाल लगा रहा हूं।
शॉन जे। गोफ

रिबूट के बजाय बंद करने का कोई तरीका?
सिरो सेंटिल्ली 新疆 改造 iro i

@ ShawnJ.Goff बूट लोडर उपयोगकर्ता द्वारा बूट किए जाने से बहुत पहले इस पैरामीटर को पारित करने का समर्थन करता है। वैसे भी, मेरा जवाब देखें: unix.stackexchange.com/a/517364/6622
poige

5

कॉन्फ़िगरेशन फ़ाइल बूट (ग्रब) कॉन्फ़िगरेशन फ़ाइल ही है, क्योंकि यह बूट समय पर लगाया गया पैरामीटर है और ग्रब को किसी अन्य कॉन्फ़िगरेशन फ़ाइल से पढ़ने की उम्मीद नहीं की जा सकती है, जबकि फाइलसिस्टम माउंट नहीं है।

हालाँकि, यह एक आरंभिक सेटिंग है, रनटाइम को इसके माध्यम से भी संशोधित किया जा सकता है sysctl। तो, अनिवार्य रूप /etc/sysctl.confसे पैरामीटर के साथ kernel.panic = 3अद्यतन करना कॉन्फ़िगरेशन अपडेट है।


1
ग्रब सभी प्रणालियों पर नहीं है; मैं जिस के साथ काम कर रहा हूं वह ग्रब का उपयोग नहीं कर रहा है। मेरा बूटलोडर का विन्यास फ्लैश में संग्रहीत है।
शॉन जे। गोफ

हाँ, अभी भी .. यह फाइल सिस्टम को माउंट कर सकता है और कर्नेल कॉन्फिग फाइल को पढ़ सकता है? अगर हाँ, तो आप वहाँ जाएँ। क्योंकि इसका बूट लोडर जो कर्नेल को लोड करते समय कर्नेल पैरामीटर को कर्नेल में भेजता है।
निखिल मुले


3

लिनक्स कर्नेल में, (मैंने 3 और ऊपर देखा है) में विकल्प है .configCONFIG_PANIC_TIMEOUTके लिए पैरामीटर और चूक है 0। लिनक्स कर्नेल के इन संस्करणों में, लेकेनस्टेन का जवाब भी काम करेगा। लेकिन वह चर .configकेवल से ले रहा है ।

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

लिनक्स कर्नेल सपोर्ट करता है CONFIG_CMDLINE_BOOL

बिल्ड समय पर कर्नेल में बूट तर्कों को निर्दिष्ट करने की अनुमति दें। कुछ प्रणालियों (जैसे एम्बेडेड वाले) पर, कर्नेल के साथ कुछ या सभी कर्नेल बूट तर्कों को प्रदान करना आवश्यक या सुविधाजनक है (अर्थात, उन्हें प्रदान करने के लिए बूट लोडर पर भरोसा नहीं करना है।)

उदाहरण के लिए इस "पोर्टल" पर भी कुछ उदाहरण हैं

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored


0

आप इस पैच का उपयोग कर सकते हैं , जो एक विन्यास विकल्प जोड़ता है।


0

पहले अन्य उत्तरों में जानकारी समाप्त करें। मान को कर्नेल / आतंक। c और rw में sysctl के माध्यम से परिभाषित किया गया है। इसे बूट कमैंलाइन के रूप में पास किया जा सकता है।

मैं और क्या कहने वाला हूं, संकलन के दौरान बूट कमांडलाइन को डिफ़ॉल्ट मान सेट किया जा सकता है

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