आउटपुट को उत्पन्न करने वाली कमांड को प्रभावित किए बिना मैं आउटपुट को कम कैसे रोक सकता हूं?


12

मैं एक सर्वर चला रहा हूं और इस सर्वर का लॉग किसी भी फाइल में नहीं बल्कि टर्मिनल में लॉग इन होता है। मैं इस लॉग को देखने के लिए कम उपयोग करना चाहूंगा।

node server.js | less

जब मैं केवल लॉग देखना चाहता हूं, तो मैं फ़ाइल के अंत में जाने के लिए प्रेस Shift+ Fका उपयोग करता हूं और लॉग को देखता रहता हूं । जब मैं इसे रोकना चाहता हूं, मैं CTRL+ का उपयोग करता हूं C

दुर्भाग्य से, यह सर्वर को भी रोकता है। मैं बस सर्वर को बंद किए बिना लॉग के अंत को देखना बंद करना चाहता हूं।

यह कैसे करना है?


1
क्या आप पृष्ठभूमि में चल रहे सर्वर के lessसाथ अपने शेल प्रॉम्प्ट से बाहर निकलना और वापस जाना चाहते हैं node, या क्या आप lessसामान्य गैर-निम्न मोड में वापस आना चाहते हैं जहां आप नवीनतम लाइनों को देखने के बजाय लॉग के माध्यम से स्क्रॉल कर सकते हैं?
बाइट कमांडर

@ByteCommander जब मैं CTRL + C दबाता हूं। मैं चाहता हूं कि मेरा सर्वर चालू रहे और मैं कम सामान्य गैर-निम्न मोड पर वापस जाना चाहता हूं, जहां मैं स्क्रॉल कर सकता हूं।
अजय कुमार

जवाबों:


17

मुझे Fमोड से बाहर निकलने का कोई तरीका नहीं मिल रहा है less, इसलिए आपको वर्कअराउंड का उपयोग करना होगा। उदाहरण के लिए, आउटपुट को tmp फ़ाइल में सहेजें और फिर उस tmpfile को देखें:

node server.js > tmpfile & less tmpfile

&बनाता node.jsआदेश पृष्ठभूमि में चलाने। इसका मतलब है कि less tmpfileतुरंत शुरू होगा और टैम्पाइल को ट्रैक करेगा।

में एक बार less, आप भी दबा सकते हैं Fपालन मोड में प्रवेश करने, लेकिन अब Ctrl+ Cयह केवल पालन करना बंद कर देगा सर्वर नहीं मारूंगा,। अब आप जैसे चाहें वैसे स्क्रॉल कर सकते हैं और Fफिर से शुरू करने के लिए हिट कर सकते हैं ।


13

ऐसा लगता है कि आप सामान्य रूप से बाहर निकलने के लिए नहीं जा सकते "आगे हमेशा के लिए" मोड है, जो कैसे मैनुअल है man lessनाम मोड आप में प्रवेश जब दबाने Shift+ F

हालांकि, मुझे थोड़ी गंदी चाल मिली कि आप किसी भी तरह से सामान्य कैसे लौट सकते हैं। हालांकि यह संक्षेप में कमांड को फ्रीज कर देगा, इसलिए मुझे यकीन नहीं है कि यह आपके सर्वर के लिए उपयुक्त होगा जो संभवतः निर्बाध रूप से चलना चाहिए।


वैसे भी, यहाँ चाल है:

मुझे लगता है कि आप शुरू कर दिया है node server.js | lessalredy और दबाया Shift+ Fप्रवेश करने के लिए "आगे हमेशा के लिए" मोड। अब lessकिसी भी keypresses पर कोई प्रतिक्रिया नहीं है।

इस स्थिति में, आप सर्वर प्रक्रिया को मारने के लिए Ctrl+ दबा सकते Cहैं और lessबाद में छोड़ने में सक्षम हो सकते हैं Q(जो कि किसी कारण से आपकी नौकरी सूची में बंद प्रक्रिया के रूप में कमांड को छोड़ देगा - आपको fgइसे जारी रखने के लिए दौड़ना होगा और इसे पूरी तरह से छोड़ना होगा बाद में समाप्त करें), लेकिन यह वह नहीं है जो हम चाहते हैं।

इसके बजाय, आप कमांड ("फ्रीज") को रोकने के लिए Ctrl+ दबा सकते हैं Zऔर अपने शेल प्रॉम्प्ट पर लौट सकते हैं। अब जल्दी से शेल कमांड fg(" f अयस्क जी राउंड") टाइप करें ताकि कमांड को अग्रभूमि में चालू रखा जा सके। ध्यान दें कि nodeइस कम समय के दौरान आपकी सर्वर प्रक्रिया भी रुकी हुई है, आपको विचार करना होगा कि यह स्वीकार्य है या नहीं।

तो अब lessपहले की तरह फिर से अग्रभूमि में चल रहा है ना? हां, लेकिन जादुई रूप से यह "फॉरवर्ड फॉरएवर" मोड में नहीं है। आप तीर कुंजी को फिर से ऊपर और नीचे स्क्रॉल करने के लिए उपयोग कर सकते हैं।

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

सबसे आसान तरीका मुझे यह करना है कि बस less'स्क्रीन को खोलने और कुंजियों Hको Qक्रम से दबाकर इसे फिर से बंद करना है । अब सबकुछ फिर से ठीक होता दिख रहा है।


हालांकि सबसे साफ समाधान शायद टेर्डन के उत्तर का पालन करना और फ़ाइल lessको मॉनिटर करने के लिए एक अस्थायी फ़ाइल में आउटपुट रीडायरेक्ट करना है ।


बल्कि शानदार गंदा हैक।
TRIG

मुझे लगता है कि मैं स्वीकार किए जाते हैं इस जवाब को पसंद करते हैं। ध्यान दें कि आप के %बजाय चला सकते हैं fg; मुझे टाइप करना आसान / तेज लगता है। इसके अलावा ऐसा लगता है कि F(शिफ्ट-एफ) अभी भी hqचालबाजी किए बिना काम करता है । अच्छा! अब जब मैं लॉग्स का पालन कर रहा हूं ctrl-z % Enter, तो मैं अपना कम काम कर सकता हूं, फिर हिटिंग के बाद वापस जाएं F!
जोएल

BTW, आपको इसे गंदा नहीं कहना चाहिए। व्यक्तिगत रूप से, इस के रूप में, यहाँ, आप कूड़े के लिए अस्थायी फ़ाइलें (जिसके लिए आप एक नाम के बारे में सोच और उसके बाद उन्हें हटाने के लिए) के साथ अपने फाइल सिस्टम की जरूरत नहीं है अन्य समाधान की तुलना में क्लीनर लगता है, खासकर जब आप उपयोग करना चाह सकते हैं lessके अनुवर्ती एक ही समय में कई टर्मिनलों में सुविधा।
JoL

2
मैंने स्रोत में नहीं देखा है, लेकिन यह संभवतः इसलिए काम करता है क्योंकि TSTPसिग्नल रीड सिस्टम कॉल को बाधित करता है जो नए डेटा के आने का इंतजार कर रहा था; less0 बाइट्स प्राप्त करता है और निष्कर्ष निकालता है कि आउटपुट समाप्त हो गया है। सर्वर को रोकने से बचने के लिए, एक नई टर्मिनल विंडो खोलें; psप्रक्रिया की प्रक्रिया आईडी को निष्पादित और पहचानना less; फिर टाइप करें kill -TSTP <PID>; kill -CONT <PID>। इस तरह से सिग्नल आपको वापस टाइप करते हुए, बिना देरी के डिलीवर हो जाने चाहिए।
एलेक्सिस

@alexis यदि आप उपयोग करने जा रहे हैं kill, तो आप इसके बजाय केवल SIGINT भेज सकते हैं। फिर आपको भेजने की जरूरत नहीं होगी CONT, और lessबस आपका इंतजार है।
मूरू

3

जैसा कि आपका सवाल कहता है:

यह सर्वर किसी फाइल में नहीं बल्कि टर्मिनल में लॉग इन होता है।

मुझे लगता है कि आप (अस्थायी) लॉग फ़ाइल का उपयोग नहीं करना चाहते हैं, हो सकता है कि आपका लॉग बहुत बड़ा हो या आपके पास जो भी कारण हो।


नामित पाइप, fifoफ़ाइल।

जो मैं साथ आया था वह named pipe fileभी fifoफाइल के रूप में जाना जाता है, इस फ़ाइल का उपयोग केवल आपके लॉग को कम करने के लिए किया जाएगा, और इसके लिए कुछ भी नहीं बचाया जाएगा।

पहले एक बनाएँ fifo file:

mkfifo mylog

अपना सर्वर चलाएं और लॉग को इस फ़ाइल पर पुनर्निर्देशित करें:

node server.js > mylog &

अपने लॉग पढ़ने के लिए कम प्रयोग करें (-इस विशेष फ़ाइल को पढ़ने के लिए कम बल):

less -f mylog

अब आप उपयोग कर सकते हैं shift+ Fपालन करने के लिए, और CTRL+ Cपालन को रोकने के लिए है, लेकिन सर्वर अभी भी चल रहा है, तो आप के साथ फिर से उत्पादन का पालन कर सकते shift+ F


बैकअप योजना : यदि इसने आपके सर्वर को बंद कर दिया है, तो बस अपनी कमांड ( node server.js > mylog &) को एक फाइल में डालें जैसे:, server.shफिर रनिंग node server.js > mylog &रन के बजाय : bash server.sh > mylog &और फिर रन करें less -f mylog


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

2
मैं यहां एक FIFO के खिलाफ सलाह देता हूं क्योंकि अगर कोई भी अनुरोध (अधिक) लॉग डेटा नहीं करता है, तो FIFO बफर पूर्ण चलने पर सर्वर प्रक्रिया ठप हो सकती है। यदि लॉग फ़ाइल का आकार एक समस्या बन जाता है, तो वास्तव में एक उचित लॉग फ़ाइल प्लस का उपयोग करना चाहिए logrotate
डेविड फ़ॉस्टर 01

@terdon जैसा कि आपने कहा कि एकमात्र बिंदु डिस्क को सहेज रहा है, मैंने सोचा कि ओपी नहीं चाहता कि उसके लॉग डिस्क पर सहेजे जाएं।
रवेक्सिना

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