क्या वास्तव में "ए स्टॉप जॉब" है, जैसा कि "ए स्टॉप जॉब चल रहा है ..."?


28

शटडाउन कमांड जारी होने के बाद, कभी-कभी किसी को इस तरह एक स्थिति संदेश मिलता है:

A stop job is running for Session 1 of user xy

और फिर सिस्टम थोड़ी देर के लिए लटका रहता है, या हमेशा के लिए निर्भर करता है ???

तो वास्तव में "स्टॉप जॉब" क्या है?

इसके अलावा, यह कभी-कभी समय का अनुमान क्यों लगाता है, काफी सटीक रूप से, और अन्य बार यह हमेशा के लिए चल सकता है?


1
शायद यह नौकरी बंद कर दी जानी चाहिए ? सत्र ने नौकरियों को रोक दिया है, जो वास्तव में नहीं चल रहे हैं, और इसलिए समाप्ति संकेतों का जवाब देने का अवसर नहीं है।
कज़

जवाबों:


27

systemd "jobs" की कतार के संदर्भ में आंतरिक रूप से संचालित होता है। प्रत्येक कार्य (थोड़ा सा सरल करना) एक विशेष इकाई को रोकने, जांचने, शुरू करने या फिर से शुरू करने की एक क्रिया है ।

जब (उदाहरण के लिए) आप एक सेवा इकाई शुरू करने के लिए systemd को निर्देश देते हैं , तो यह उस लक्ष्य को प्राप्त करने के लिए आवश्यक इकाइयों (सेवा इकाइयों, माउंट इकाइयों, उपकरण इकाइयों, और इसी तरह) के लिए रुकने और नौकरी शुरू करने की एक सूची के अनुसार काम करता है। यूनिट आवश्यकताओं और निर्भरता, उन्हें आदेश देता है, यूनिट ऑर्डरिंग रिश्तों के अनुसार, बाहर काम करता है और (यदि संभव हो तो) किसी भी आत्म-विरोधाभासों को ठीक करता है, और (यदि वह अंतिम चरण सफल होता है) उन्हें कतार में रखता है।

फिर यह "नौकरी" की कल्पना करने की कोशिश करता है।

उपयोगकर्ता xy के सत्र 1 के लिए एक रोक कार्य चल रहा है

इकाई प्रदर्शन नाम यहाँ है Session 1 of user xy। यह (प्रदर्शन नाम से) एक हो जाएगा सत्र इकाई है, न कि सेवा इकाई। यह उपयोगकर्ता-स्थान लॉगिन सत्र अमूर्तता है जिसे सिस्टमड के logindप्रोग्राम और इसके PAM प्लगइन्स द्वारा बनाए रखा जाता है। यह (संक्षेप में और सिद्धांत में) उन सभी प्रक्रियाओं का एक समूह है जो उपयोगकर्ता कहीं न कहीं "लॉगिन सत्र" के रूप में चल रहा है।

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

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

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

आगे की पढाई


1
इस उत्तर के अनुसार, unix.stackexchange.com/a/297318/224025 हम इस समय को बदल सकते हैं। अगर मैं इसे शून्य सेकंड में बदल दूं तो क्या यह सुरक्षित होगा (या इससे कोई नुकसान होगा)?
जिप्सीकोस्मोनॉट

1
दरअसल, इस उत्तर के अंतिम पैराग्राफ और उपयोगकर्ता मैनुअल जिसे मैं आपको आगे पढ़ने के लिए इंगित करता हूं, पहले से ही आपको टाइमआउट बदलने के बारे में बताता है। क्या मतलब है टाइमआउट एक 0s और यह काम करने के लिए सुरक्षित है प्रति एक सवाल के रूप में कहा जाना चाहिए के बारे में एक सवाल कैसे पूछ क्योंकि यह एक है फॉलो-ऑन सवाल क्या एक "रोक काम" है और क्यों समय समाप्ति पर भिन्न का सवाल है। मुझे संदेह है कि यह एक अच्छा हो सकता है।
JdeBP

2

ये संदेश सिस्टमड से हैं, जो एक init सिस्टम है जो नौकरियों को शुरू और रोकता है। नौकरियां डेमन हो सकती हैं, लेकिन बढ़ते हुए और अनमाउंटिंग डिस्क, डिलीट / tmp, या बूट के दौरान स्क्रीन की चमक को बचाने और पुनर्स्थापित करने जैसे छोटे कार्य भी कर सकते हैं। systemctl list-unitsआपको विचार देता है। सिस्टमड "यूनिट" और "जॉब" का उपयोग करता है, जिसका अर्थ है कि एक ही चीज।

जब एक नौकरी को रोका जा रहा है, जैसा कि systemctl stop ...तब है, तो एक सवाल यह है कि विफलता की घोषणा करने और SIGKILLसिग्नल के साथ नौकरी की प्रक्रियाओं को मारने से पहले नौकरी का इंतजार करने के लिए कितना समय है । हम वास्तव में SIGKILLतब तक उपयोग नहीं करना चाहते जब तक हमारे पास नहीं है, क्योंकि यह प्रक्रिया को साफ-सुथरे तरीके से बाहर निकलने का अवसर नहीं देता है। कुछ प्रक्रियाओं के लिए विफलता घोषित करने में कुछ सेकंड का समय हो सकता है, अन्य प्रक्रियाओं के लिए जैसे डेटाबेस में पर्याप्त नेटवर्क हो सकता है और नौकरी के लिए साफ़ करने के लिए I / O डिस्क हो सकती है, और इसलिए हम उन इकाइयों को सफाई बंद करने के लिए कई मिनट दे सकते हैं। ।

आप शटडाउन पर systemctl stop $UNIT_NAMEजो देख रहे हैं वह बराबर है जिसे चलाने में थोड़ा समय लग रहा है। एक काउंटर है जो बीता हुआ सेकंड दिखाता है और SIGKILL से पहले अधिकतम प्रतीक्षा समय जारी किया जाएगा और शटडाउन की परवाह किए बिना आगे बढ़ें।

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


"सिस्टमड" यूनिट "और" जॉब "का उपयोग करता है, जिसका मतलब समान चीज से है।" मुझे नहीं लगता कि यह सच है: मोटे तौर पर, एक "नौकरी" एक "इकाई" के लिए कुछ करने का अनुरोध है। विवरण के लिए @ JdeBP का उत्तर देखें।
थॉमस

1

कुछ सेवा अटकी हुई है और systemd इसके निकलने का इंतजार कर रहा है। सिस्टमड शायद सही समय का अनुमान नहीं लगा रहा है, समय (आमतौर पर 90 सेकंड) यह है कि इससे पहले कि धैर्य खत्म हो जाए, सिस्टमडे का इंतजार कितना लंबा होगा। इस पोस्ट को देखें:

एक रोक नौकरी उपयोगकर्ता के सत्र c2 के लिए चल रही है


6
मैं कैसे पता लगा सकता हूं कि कौन सी सेवा हैंग हुई है?
नॉटिश्चर

0

"स्टॉप जॉब्स" तब systemdहोती हैं जब किसी विशिष्ट "जॉब" का इंतजार करना बंद हो जाता है, जैसे कुछ प्रक्रिया जिसे आगे बढ़ने से पहले इसे पूरा करने की प्रतीक्षा है। यदि आप एक चेतावनी संदेश देखते हैं कि "स्टॉप जॉब चल रहा है ..." (आदि) यह तकनीकी रूप से इसका मतलब है कि कुछ काम की कतार में लंबित है।

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

उदाहरण के लिए: हमें संबंधित संदेशों को "नौकरी रोकना" मिल रहा था और यह पता नहीं लगा सका कि .... क्यों निकला, डिस्क लगभग अंतरिक्ष से बाहर थी, और इसने ओएस को अजीब व्यवहार करना शुरू कर दिया।

सर्वर को एक बड़ी डिस्क पर अपग्रेड करना और इसे रीबूट करना;)

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