स्टडआउट के लिए अनुप्रेषित nohup


14

क्या यह संभव है कि कोई प्रक्रिया nohup से शुरू हो, एक फाइल के बजाय stdout को लिखें? या शायद फ़ाइल में और स्क्रीन पर?

nohup python start.py &

लिखता है nohup.out, लेकिन मैं इसे स्क्रीन पर आउटपुट देना चाहूंगा, नोह केवल एक हेज के रूप में होता है जब कनेक्शन टूट जाता है।


लेकिन क्या होता है जब कनेक्शन टूटने के बाद आपका प्रोग्राम आउटपुट करता है?
Womble

जवाबों:


4
  1. nohup python start.py & tail -f nohup.outtail -fमारे गए और होगा पर पुन: प्रारंभ कर सकते हैं।

  2. screen python start.py और डिस / / री-कनेक्ट पर होगा।


10

से man nohup:

यदि मानक इनपुट एक टर्मिनल है, तो इसे / dev / null से पुनर्निर्देशित करें। यदि मानक आउटपुट एक टर्मिनल है, nohup.out तो यदि संभव हो तो आउटपुट जोड़ें $HOME/nohup.out। यदि मानक त्रुटि एक टर्मिनल है, तो इसे मानक आउटपुट पर पुनर्निर्देशित करें। उत्पादन करने के लिए फ़ाइल को बचाने के लिए, का उपयोग करें nohup COMMAND > FILE

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

nohupकार्यक्रम का उद्देश्य शेल समाप्त होने और टर्मिनल डिस्कनेक्ट होने के बाद भी प्रक्रिया को चालू रखना है। जैसे, इसके आउटपुट को टर्मिनल पर निर्देशित करना उद्देश्य को पूरी तरह से हरा देता है। मेरा मूल उत्तर ( nohup COMMAND | cat) सहायक नहीं था क्योंकि: जब टर्मिनल बंद हो जाता है, तो बिल्ली का आउटपुट बंद हो जाता है और इसलिए बिल्ली मर जाती है जो पाइप को तोड़ देती है और नूप प्रक्रिया को एक SIGPIPE भेजती है जिससे यह मर जाता है। मैंने बिना सोचे समझे प्रश्न का उत्तर दे दिया था।

अपने उद्देश्य को प्राप्त करने के लिए, nohup COMMAND > FILEआउटपुट को डायरेक्ट करने के लिए फ़ाइल का नाम चुनें। फिर tail -f FILEएक टर्मिनल पर आउटपुट देखने के लिए उपयोग करें।

इसी तरह, कोई भी निम्नलिखित शेल कंस्ट्रक्शन का उपयोग कर सकता है: COMMAND >FILE 2>&1 </dev/null &एक कमांड चलाने के लिए जिसकी stdio धाराएं टर्मिनल से जुड़ी नहीं हैं और टर्मिनल बंद होने के बाद भी चलती रह सकती हैं। इसके अतिरिक्त, zsh में, शेल-बिलिन को चलाने के disownलिए zsh को यह बताएं कि शेल समाप्त होने पर इसे मारने के बजाय प्रक्रिया को छोड़ दें।


1
एक अच्छा जोड़: यदि nohup कमांड पहले से ही एक फ़ाइल नाम के साथ शुरू किया गया था, तो आप यह tail -f filenameदेखने के लिए उपयोग कर सकते हैं कि फ़ाइल में क्या लिखा गया है।
हेनस

काम नहीं करता है, एक बार जब कनेक्शन बंद हो जाता है तो फ़ाइल अब नहीं लिखी जाती है
दावउड तगावी-नेजाद

आप सही हैं: मैंने सवाल का जवाब दिया (टर्मिनल में आउटपुट भेजें) लेकिन उद्देश्य को हरा दिया। मैंने अपने उत्तर को फिर से लिखा।
dsh

-1
vladimir@lin-mint-cin:~$ tty<br>
/dev/pts/8<br>
vladimir@lin-mint-cin:~$ ln -sf /dev/pts/8 nohup.out<br>
vladimir@lin-mint-cin:~$ nohup ls<br>
nohup: ввод игнорируется, вывод добавляется в 'nohup.out'<br>
2019-05-31-090159.jpg    giphy.gif        nim_porojects   sketchbook
Aptana_Studio_Workspace  IdeaProjects         nohup.out       target
Desktop          jack_capture_01.wav  Pictures        Templates
Documents        lib              Postman         tmp
Downloads        mad              Projects        trace.edn
eclipse          Mail             prolog_ws       uinfild_hill-iskusstvo_shemotehniki_tom_1_izd4-e-1489315100.pdf
eclipse-dsl-workspace    Music            proxy-secret    Videos
eclipse-workspace    mygolo           Public          workspace-dltk
erlang_ex        my_golo_ws       rust-workspace  проекты
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.