मुझे नहीं पता था कि यह एसओ पर था (क्योंकि यह एक कोडिंग बग है) लेकिन सोचा कि आप लोग उपयोग किए गए सॉफ़्टवेयर की सूक्ष्मताओं के बारे में अधिक जानकार होंगे (इसलिए शायद यूएंडडी पर भी विचार किया जा सकता है)।
यहां न्यूनतम कोड स्क्रिप्ट है (पूर्ण स्क्रिप्ट के लिए संपादन देखें, एक कारण है कि मैं इसे इस तरह से कर रहा हूं);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
यह क्या करने की कोशिश करता है पृष्ठभूमि में एक सर्वर चलाया जाता है, जो लॉग फ़ाइल के लिए आउटपुट करता है।
फिर मैंने followउस लॉग फ़ाइल का उपयोग किया less +F। जैसा कि आप करते हैं, इससे बाहर निकलने के लिए आपको हिट करने से पहले ctrl+ हिट करना होगा ।cQ
क्या होता है, जब मैं ctrl+ कमांड के cअंदर less( tailingइसे रोकने के लिए ) किसी तरह सर्वर nohupको ऊपर से शुरू कर देता है ! और कुछ भी प्रभावित नहीं है। मैं लॉग को फिर से सिलाई शुरू करने के लिए shift+ कर सकता हूं f(जो कि सर्वर के मारे जाने के बाद से कोई नई जानकारी नहीं मिलती है) और अगर मैं हिट Qकरता हूं तो बाकी स्क्रिप्ट सामान्य रूप से निष्पादित होती है।
क्या आप जानते हैं कि ऐसा क्यों होता है? इससे कैसे बचें / मैं कुछ और उपयोग करूं?
PS
सर्वर प्रोग्राम एक के लिए सुन सकता है ^C, जो कि समस्या हो सकती है; क्या मुझे रोकने के लिए कुछ किया जा सकता है? जैसे, जब मैं सिर्फ {SERVERCOMMAND}अपने दम पर चलता हूं (अवरुद्ध तरीके से), मैं हिट कर सकता हूं ctrl+ c, जो तुरंत इसे नहीं मारता है; यह प्रिंट करता है Received ^C signal, shutting down(और फिर खुद को मारता है)। यह तब होता है जब मैं ^Cअंदर होता हूं less(ए फाइनल Received ^C signal, shutting downलॉग को लिखा जाता है)।
पीपीएस
मैं कई चीजों की कोशिश कर रहा हूं (कोई भी काम नहीं किया);
बदलकर स्क्रिप्ट से स्टड को डिस्कनेक्ट करने की कोशिश कर रहा है
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &stty intr ^Gरुकावट कमांड को बदलने के लिए उपयोग कर रहा है, लेकिन तब ctrl+ gने^Cवैसे भी किया था (इसलिए यह मेरे टर्मिनल एमुलेटर के साथ एक मुद्दा हो सकता हैkonsole) ;कोष्ठक में
nohup& / याlessपंक्ति रखकर (इसे उप-स्तरीय बनाने के लिए)xtermइसके बजाय स्क्रिप्ट चल रही हैkonsole
nohupSIGHUPसिग्नल प्राप्त करने से प्रक्रिया को रोकता है जबकि CTRL + C SIGINTसिग्नल भेजता है। इसीलिए nohupआपके पास अपेक्षित प्रभाव नहीं है।
I think it is due to the handling within the database software, not on the shell। एक कार्यक्रम यह कैसे करेगा? मैं इसे कैसे रोक सकता हूं?