2012-10-16 20 views
11

मैं तीन खोल स्क्रिप्ट जो मैं below-भागो तीन खोल स्क्रिप्ट एक साथ

sh -x script1.sh 

sh -x script2.sh 

sh -x script3.sh 

तो प्रत्येक स्क्रिप्ट एक समय में क्रमिक रूप से एक क्रियान्वित किया जाता है के बाद पिछले एक निष्पादन पूरा के रूप में चल रहा है।

समस्या वक्तव्य: -

वहाँ किसी भी तरह से मैं एक एकल खिड़की से एक ही समय में सभी तीन ऊपर आलेख निष्पादित कर सकता है? मैं सिर्फ एक ही समय में script1, script2, script3 निष्पादित करना चाहता हूं। यदि आप कुछ CRON JOB शेड्यूलिंग script1 at 3 AM, script2 at 3AM, script3 at 3AM (एक ही समय में सभी तीन स्क्रिप्ट्स, एक साथ) के बारे में सोचते हैं। मुझे यही चाहिए, मुझे एक साथ सभी तीन स्क्रिप्ट निष्पादित करने की आवश्यकता है।

+0

मेरा जवाब यहां देखें: http://stackoverflow.com/a/33106658/2032852 मैंने एक ही समस्या के लिए एक स्क्रिप्ट के साथ एक समाधान साझा किया जो आपको किसी भी प्रोग्राम को चलाने की अनुमति देता है, अपने आउटपुट को अलग लॉग पर रीडायरेक्ट करता है फाइलें और उनके लिए खत्म होने का इंतजार करें। – Joaopcribeiro

उत्तर

22

आप इसे चाहते हैं?

$ sh -x script1.sh & sh -x script2.sh & sh -x script3.sh & 

अद्यतन विवरण:

  • भागो पृष्ठभूमि मोड में प्रत्येक स्क्रिप्ट ताकि अगली कमांड मौजूदा आदेश को पूरा करने के लिए इंतज़ार कर के बिना चलाया जाता है।
  • '&' पृष्ठभूमि में चलाने स्क्रिप्ट तो यह पूरा करने के लिए के लिए
  • '&' भी एक पंक्ति आदेशों कमांड लाइन पर एक के बाद एक चल के समान पर श्रृंखला आदेशों के लिए इस्तेमाल किया जा सकता है कि शीघ्र इंतजार नहीं करता है बनाता है।
+0

क्या आप समझा सकते हैं कि यह क्या करेगा? क्योंकि मैं यूनिक्स सामान से ज्यादा परिचित नहीं हूं। – ferhan

+0

रोहन - आपके पास कुछ त्रुटियां हैं। त्रुटि संदेश 'बैश: अनपेक्षित टोकन के पास वाक्यविन्यास त्रुटि जैसा दिखाई देगा;'। आपको अर्धविराम दोनों को हटा देना चाहिए। और एक वैध कमांड विभाजक स्वयं ही है। उदाहरण के लिए, 'echo echo करें; गूंज बी &; echo c & 'बनाम 'echo करें और echo e & echo c &' –

+0

@ jwpat7, अच्छा बिंदु उत्तर अपडेट किया गया, धन्यवाद। – Rohan

3

सुनिश्चित करें कि आप क्या हासिल करने की कोशिश कर रहे हैं, लेकिन आप एक स्क्रिप्ट है कि इन 3 कॉल बना सकते हैं या अंत में एक "&" जोड़कर पृष्ठभूमि करने के लिए उन्हें भेज सकते हैं नहीं।

sh -x script1.sh & 
sh -x script2.sh & 
sh -x script3.sh & 
+3

और आप तीनों को समाप्त करने के लिए प्रतीक्षा करने के लिए 'प्रतीक्षा' का उपयोग कर सकते हैं। –

+0

धन्यवाद यह काम कर रहा है। लेकिन मान लीजिए कि अगर मुझे पृष्ठभूमि में चल रहा है तो मुझे इस काम को मारने की ज़रूरत है, तो मैं यह कैसे कर सकता हूं? – ferhan

+1

जब आप इसे "&" के साथ चलाते हैं तो यह एक प्रक्रिया आईडी देता है। रन मार Baconator507

4

& पृष्ठभूमि में चलाने की प्रक्रिया को अनुमति देता है।

sh -x script1.sh & 
sh -x script2.sh & 
sh -x script3.sh & 
+0

धन्यवाद यह काम कर रहा है। लेकिन मान लीजिए कि अगर मुझे पृष्ठभूमि में चल रहा है तो मुझे इस काम को मारने की ज़रूरत है, तो मैं यह कैसे कर सकता हूं? – ferhan

+0

@ user1419563 आप 'पीआईडी' (प्रक्रिया आईडी) देख सकते हैं। आमतौर पर मैं क्या करता हूं 'ps -ef | टाइप करें grep sh' चल रहे सभी शैल स्क्रिप्ट ढूंढने के लिए। वहां से आप 'मारो पीआईडी' टाइप कर सकते हैं जो सुरुचिपूर्ण नहीं है लेकिन काम करता है। – squiguy

5
जीएनयू साथ

समानांतर आप कर सकते हैं:

parallel sh -x ::: script1.sh script2.sh script3.sh 

स्क्रिप्ट तो निष्पादन योग्य हैं, तो आप भी कर सकते हैं:

parallel ::: script1.sh script2.sh script3.sh 

घड़ी परिचय वीडियो अधिक जानने के लिए: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

10 सेकंड स्थापना:

wget -O - pi.dk/3 | bash 
संबंधित मुद्दे