पृष्ठभूमि में कई nohup कमांड चल रहे हैं


12

दो कमांड cmd1 और cmd2 मिला। दो में से, cmd2 को खत्म होने में अधिक समय लगता है। Cmd2 चलाने की आवश्यकता है और फिर cmd1।

उन्हें निम्नलिखित तरीके से चलाने की कोशिश की:

bash$ (nohup ./cmd2>result2 &) && nohup ./cmd1>result1 &

या

bash$ (nohup ./cmd2>result2 &) ; nohup ./cmd1>result1 &

लेकिन दोनों बार मैं देख सकता हूं कि cmd1 खत्म होने के लिए cmd2 का इंतजार नहीं कर रहा है और परिणाम 1 भरा हुआ है।

Cmd1 को cmd2 के बाद कैसे चलाया जाए जब दोनों को nohup प्रक्रिया होना चाहिए और पृष्ठभूमि में चलना चाहिए?


यह सवाल पहले से ही unix.stackexchange.com/questions/67006/…
राहुल पाटिल

2
Unix.stackexchange.com/questions/67006/… में सवाल थोड़ा अलग है क्योंकि मैं अपने निष्पादन के आदेश को बनाए रखना चाहता था। कृपया मुझे सही करें अगर मैं दूसरे प्रश्न को समझने में गलत हूं।
user33767

जवाबों:


12

आपने दोनों को बनाया cmd1और cmd2समानांतर में चलाया। आपने कहा: "पृष्ठभूमि में cmd2 प्रारंभ करें और इसके साथ किसी भी संबंध को अलग करें। Cmd1 को पृष्ठभूमि में शुरू करें और इसके साथ किसी भी संबंध को अलग करें। आपका मतलब था: "पृष्ठभूमि में cmd2 प्रारंभ करें; जब यह पूरा हो जाए, तो cmd1 (पृष्ठभूमि में भी) शुरू करें। ” चूंकि पृष्ठभूमि कार्य के साथ अब कोई संबंध नहीं है, इसलिए आपको cmd2 और cmd1 प्रदर्शन करने वाले पृष्ठभूमि कार्य को तैयार करना होगा। यह cmd2; cmd1(या cmd2 && cmd1cmd1 को चलाने के लिए केवल अगर cmd2 सफल होता है), और आपको nohupउसके लिए पृष्ठभूमि में चल रहे एक शेल को शुरू करने के लिए बताना होगा ।

nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

धन्यवाद। यह ठीक काम कर रहा है। हाँ, जो मैं सोच रहा था, पहला सीएमडी बैकग्राउंड में जाने के बाद, यह दूसरी कमांड को प्रभावित नहीं करता है, जो कि तब भी शुरू होता है जब मैं चाहता था कि वह पहले कमांड के खत्म होने का इंतज़ार करे। मुझे बैकग्राउंड में कमांड भेजने के बारे में मैनुअल पढ़ने की जरूरत है।
user33767

3

अगर आपको नोह का उपयोग करने में कोई आपत्ति नहीं है:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown

उस की जाँच करेंगे। लेकिन वर्तमान में जाइल्स के उत्तर के साथ जाएंगे जहां कमांड को श के साथ लपेटा गया है। वैसे भी धन्यवाद
user33767

यह विचार अच्छा नहीं है। जब उपयोगकर्ता कंसोल से लॉगआउट करता है, तो यह सत्र को मार देगा।
मटूटूट

@ मूटमूट इस काम को करने के लिए, अपने लिए यह जाँच करें; जब पैरेंट शेल से बाहर निकलता है तो कमांड्स SITEUP प्राप्त नहीं करेगा।
१०'१ 'को

यदि आप crond / crontab का उपयोग करके कमांड चलाते हैं, तो यह सुरक्षित है। लेकिन यह pty / xterm / ssh सुरक्षित नहीं है। unix.stackexchange.com/questions/3886/…
mootmoot

2

बस उपयोग करें:

nohup ./cmd2>result2 & nohup ./cmd1>result1 & nohup ./cmd3>result3 &

जबकि एकाधिक कमांड चलाना ठीक है, मैं निष्पादन का सटीक क्रम यानि कि पहले cmd2 और फिर cmd1 बनाए रखना चाहता था और यह उपरोक्त कमांड के साथ नहीं हो रहा है। धन्यवाद
user33767

0

हमें बताएं कि आप वास्तव में cmd2 और cmd1 के साथ क्या कर रहे हैं। यह उस प्रकार के कार्य और आउटपुट पर निर्भर करता है जो आप अपनी आज्ञा से चाहते हैं। यदि आप कमांड के साथ दो बार टकराने के साथ समस्या का सामना कर रहे हैं तो यह मेरी इस पोस्ट द्वारा पता लगाया जा सकता है

आप इस रास्ते से भी जा सकते हैं

nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

नीचे दिए गए स्क्रीनशॉट को देखें, यहां मैं 3 कमांड का उपयोग कर रहा हूं और सभी एक-एक करके क्रमबद्ध तरीके से निष्पादित हो रहे हैं। मैंने इस कार्य के लिए backticks का उपयोग किया। स्क्रीनशॉट में आप डेट टाइम स्टैम्प भी देख सकते हैं। स्लीप कमांड में 60 सेकंड होते हैं, इसलिए 60 सेकंड के बाद मेरी अगली कमांड सफलतापूर्वक चलती है। मैंने जॉब्स कमांड का उपयोग किया है यह देखने के लिए कि क्या कोई कमांड अभी भी पृष्ठभूमि पर चल रही है। यहाँ नहीं है। नौकरियों के आप देख सकते हैं 1 है।

nohup-बहु-आदेश

यह स्क्रीनशॉट इस लिंक में भी उपलब्ध है , अगर यह दिखाई नहीं देता है

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