नोहप जॉब को अग्रभूमि में लाएं


14

निम्नलिखित nohupनिष्पादन पर विचार करें :

nohup script.sh > script.out &

क्या टर्मिनल को लॉग इन करने, फिर से जोड़ने, प्रक्रिया को अग्रभूमि में लाने और कीबोर्ड का उपयोग करने के साथ बातचीत करने का कोई तरीका है?

जवाबों:


7

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

tmux:

स्क्रीन:

संपादित करें: tmux प्राइमरों के लिए लिंक जोड़े गए


+1 उत्कृष्ट उपकरण जिसका मुझे पता नहीं था। बहुत धन्यवाद।
एडम मेटन

19

nohup टर्मिनल से एक कमांड को डिस्कनेक्ट नहीं करता है, यह आपकी स्क्रिप्ट को अनदेखा करता हैSIGHUP, औरstdout/stderrएक फ़ाइल पररीडायरेक्टकरता हैnohup.out, ताकि आपके लॉग आउट करने के बाद कमांड बैकग्राउंड में चलती रहे।

nohupस्वचालित रूप से यह पृष्ठभूमि में चलने वाली कमांड को नहीं डालता है। एक के साथ कमांड लाइन को समाप्त करके, इसे स्पष्ट रूप से करना चाहिए &

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

jobsवर्तमान में चल रही नौकरियों और उनकी स्थिति को प्रिंट कर सकते हैं। यदि कमांड jobsइसे नहीं खोज सकती है, तो यह अब उस शेल की चाइल्ड प्रक्रिया नहीं है ।

$ jobs 
[1]+  Running                 nohup ./script.sh &

एक को बैकग्राउंड में बैकग्राउंड जॉब में लाया जा सकता है, fgभले ही इसे साथ में चलाया जाए nohup। लेकिन इससे आउटपुट पुनर्निर्देशनnohup.out नहीं बदलेगा , जो अभी भी फ़ाइल में जा रहा है

$ fg
nohup ./script.sh

यदि आप शेल / टर्मिनल बंद करते हैं या लॉग ऑफ करते हैं, तो आपकी कमांड उस शेल का बच्चा नहीं है। यह initप्रक्रिया के अंतर्गत आता है । यदि आप खोज करते हैं pstreeतो आप देखेंगे कि यह अब प्रक्रिया 1 ( init) के स्वामित्व में है । इसे अग्रभूमि में वापस नहीं लाया जा सकता क्योंकि अग्रभूमि अब मौजूद नहीं है।


If the command jobs cannot find it, then it is no longer a child process of that shell.यह गलत है: इस क्रम को देखें कि कैसे sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$:। इस आदेश के बाद आप अभी भी sleepउसी पीआईडी ​​के साथ काम देखेंगे , जब आपने इसे jobsप्रिंट किया था, जबकि कुछ भी नहीं प्रिंट करेगा। जिस तरह से एक बच्चे की प्रक्रिया को रोका जा सकता है बच्चा अपने माता-पिता को खो रहा है (तब अनाथ बच्चा बन जाता है init) या forking + exiting (लेकिन फिर पीआईडी ​​बदल जाता है, इसलिए यह मूल बच्चा नहीं है)।
रुस्लान

4

मैं दूसरा एक टर्मिनल बहुसंकेतक का इस्तेमाल करेंगे, लेकिन tmux स्क्रीन नहीं,। स्क्रीन सभी इरादों और उद्देश्यों के लिए है, अचयनित है। इसका विन्यास एक डार्क आर्ट है, जो संभवत: नेक्रोनोमिकॉन के परिशिष्ट में पहली बार दर्ज किया गया है। अपने स्वयं के विन्यास को लिखने का प्रयास करना, कथुलु की एक झलक के रूप में है। गंभीरता से। लोगों के पर चारों ओर देखो .screenrc फ़ाइलें । यह सुनिश्चित करने के लिए, स्क्रीन के विन्यास के एमीलेशन को मध्यस्थ बनाने के तरीके हैं। Byobu नश्वर उपयोगकर्ताओं और अपवित्र कोड के बीच घूंघट के रूप में एक सराहनीय काम करता है। यह समझदार रंगों के साथ आता है, एक मेनू इंटरफ़ेस, और शायद सबसे महत्वपूर्ण, एक स्टेटस बार।

लेकिन जैसा कि मैंने कहा, मैं इसके बजाय tmux की सलाह देता हूं । इसके लिए अभी भी कुछ मामूली विन्यास की आवश्यकता है, लेकिन यह अच्छी तरह से प्रलेखित है , और आपकी कॉन्फिग फ़ाइल भी अस्पष्ट नहीं होगी। इसके अलावा, आप रंगों और एक स्थिति पट्टी के साथ शुरू करते हैं। मेरी स्क्रीन आर्क और tmux.conf फ़ाइलों की तुलना करें:


0

यदि आप लाइव हैट को देखना चाहते हैं, तो यह आपके अनुरूप हो सकता है:

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out

0

किसी भी लिनक्स कमांड &को आखिरी में ' ' जोड़कर बैकग्राउंड में भेजा जा सकता है ।

सभी पृष्ठभूमि की नौकरियों को देखने के लिए, आप जारी कर सकते हैं jobs

jobs
[1]  + suspended  nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2]    running    nohup sh kafka-server-start.sh ../config/server.properties
[3]  - running    nohup sudo mongod --dbpath=/var/lib/mongodb

यहां मैं पृष्ठभूमि में 3 नौकरियां चला रहा हूं: ज़ुकीपर, काफ्का और मोंगो डेमन। [१], [२] और [३] इन कार्यों के लिए संबंधित जॉब नंबर हैं।

आप उन कार्यों को अग्रभूमि का उपयोग करके ला सकते हैं fg %$taskNumber.

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