एक के बाद एक कमांड का क्रम चलाना


6

मेरी एक स्थिति है जहाँ मैं दो कमांड चलाता हूँ (वे बैकग्राउंड में जाते हैं) आज्ञा इत्यादि ।।

मैं सोच रहा था कि क्या यह मेरे लिए संभव है, ताकि पहले दो समापन के बाद, अगले दो स्वचालित रूप से शुरू हो जाएं, ताकि मुझे हर 2 घंटे की जांच करने की आवश्यकता न हो?

वे सभी स्वतंत्र कार्यक्रम हैं; वे सिमुलेशन हैं जो मेमोरी और सीपीयू भूखे हैं, इसलिए मैं उनमें से दो से अधिक किसी भी समय एक साथ नहीं चलना चाहता हूं।

मैं उन्हें एक सिंटैक्स का उपयोग करके इसी तरह चलाता हूं:

nohup mySimulator inputs1.txt
nohup mySimulator inputs2.txt
nohup mySimulator inputs3.txt [after the first two have completed, that is..]

पहली छमाही से ये दोनों आदेश समवर्ती या क्या चल रहे हैं। बस एक उदाहरण दें कि आप उन्हें कुछ 'मेटा-प्रोग्राम्स' के साथ कैसे शुरू करते हैं
Serge

क्या दूसरी छमाही के कार्यक्रम पहली छमाही के परिणामों पर निर्भर करते हैं?
Serge

नहीं, वे सभी एक-दूसरे से स्वतंत्र हैं (आदेश कोई फर्क नहीं पड़ता) .. बस यह कि उनमें से दो से अधिक एक बार में नहीं चल सकते हैं।
Pradyumna

ठीक है, मुझे विचार मिला
Serge

जवाबों:


8

इस तरह एक शेल स्क्रिप्ट लिखें:

nohup mySimulator inputs1.txt
nohup mySimulator inputs2.txt
while (ps -A | grep -v grep | grep mySimulator > /dev/null); do sleep 1; done
nohup mySimulator inputs3.txt

फिर इसे खोल से चलाएं

यह दो सिमुलेटरों को निकालता है, तब तक इंतजार करता है जब तक कि प्रक्रिया सूची में कोई mySimulator नहीं होता है और फिर जारी रहता है।

(यह एक मैक पर चलाया गया था, इसलिए आपके ऑपरेटिंग सिस्टम के आधार पर इसे थोड़ा ट्वीक करने की आवश्यकता हो सकती है ... ps -A को सभी चलने वाली प्रक्रियाओं की सूची को प्रिंट करना है)


विचार के लिए धन्यवाद .. मैंने नींद 1 की बजाय 10 का उपयोग किया
Pradyumna

8

उपयोग wait कमांड, लेकिन nohup का उपयोग न करें।

command1 &
command2 &
wait        # this waits for command1 and command2
command3 &
command4 &

से man bash:

प्रतीक्षा करें [n ...] प्रत्येक निर्दिष्ट प्रक्रिया के लिए प्रतीक्षा करें और इसकी वापसी करें   समाप्ति की स्थिति। प्रत्येक एन एक प्रक्रिया आईडी या नौकरी हो सकती है   विनिर्देश; यदि नौकरी की युक्ति दी जाती है, तो उस नौकरी की सभी प्रक्रियाएं   पाइप लाइन का इंतजार है। यदि n नहीं दिया गया है, तो सभी वर्तमान में सक्रिय हैं   बच्चे की प्रक्रियाओं का इंतजार किया जाता है, और वापसी की स्थिति शून्य है। अगर   n एक गैर-मौजूद प्रक्रिया या नौकरी को निर्दिष्ट करता है, वापसी की स्थिति है   127. अन्यथा, वापसी की स्थिति अंतिम प्रक्रिया की निकास स्थिति है   या नौकरी का इंतजार किया


2

आप बैश का उपयोग कर सकते हैं && ऑपरेटर। यह पाइप के समान है | ऑपरेटर, सिवाय इसके कि यह आउटपुट को अगले कमांड पर पाइप नहीं करता है। इसके बजाय, यह उन्हें एक साथ जंजीर देता है ताकि निष्पादन तब तक जारी रहे जब तक कि कमांड में से कोई एक त्रुटि का सामना न करें।

उदाहरण के लिए:

echo "Test" && echo "Test done." && echo "Test2" && echo "Test2 done."

यह एक स्क्रिप्ट त्रुटि पर या किसी भी स्क्रिप्ट के लिए रुकेगा false। उदाहरण के लिए:

echo "Test" && echo "Test done." && echo "Test2" && echo "Test2 done." && false && echo "This will never trigger."
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.