2010-10-07 4 views
5

मैं एक स्क्रिप्ट चलाने के लिए चाहता हूं जब मैंने सर्वर पर भेजे गए सभी काम किए हैं।जब मेरी qsub नौकरियां सर्वर पर समाप्त होती हैं तो स्वचालित रूप से बैश स्क्रिप्ट कैसे चलाएं?

उदाहरण के लिए, मैं

ssh server "for i in config*; do qsub ./run 1 $i; done" 

भेजने और मैं वापस नौकरियों है कि शुरू किए गए की एक सूची प्राप्त। एक बार पूरा होने के बाद मैं इन नौकरियों से आउटपुट को संसाधित करने के लिए सर्वर पर स्वचालित रूप से एक और स्क्रिप्ट शुरू करना चाहता हूं।

मैं किसी भी सलाह है कि मदद मिलेगी मेरा पीछा असजीला समाधान से बचने का स्वागत करेंगे:, अगर मैं एक अलग फाइल में 1000 कार्य आईडी ऊपर कॉल से की से प्रत्येक को बचाने

मैं के खिलाफ एक फ़ाइल की सामग्री की जांच कर सकता चल रहा है नौकरियों की वर्तमान सूची, यानी के लिए एक कॉल से उत्पादन:

ssh qstat 

मैं केवल हर आधे घंटे में जांच करने के लिए की आवश्यकता होगी, लेकिन मैं कल्पना कर सकते हैं एक बेहतर तरीका नहीं है।

उत्तर

6

यह इस बात पर निर्भर करता है कि आप किस नौकरी शेड्यूलर का उपयोग कर रहे हैं और कौन सा संस्करण है, लेकिन एक और दृष्टिकोण भी है जिसे आपके परिणाम-प्रसंस्करण को नौकरी के समान कतार पर भी किया जा सकता है।

टॉर्क (और ग्रिड इंजन और अन्य के साथ) के हाल के संस्करणों में बहुत से संबंधित नौकरी के प्रबंधन का एक बहुत ही आसान तरीका नौकरी सरणी (सीएफ http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#-t) के रूप में किसी भी व्यक्तिगत नौकरियों को लॉन्च करना है। इसके लिए अलग-अलग संख्याओं को किसी भी तरह से मैप करने की आवश्यकता होती है, जो सुविधाजनक हो सकता है या नहीं; लेकिन अगर आप इसे अपनी नौकरियों के लिए कर सकते हैं, तो यह नौकरियों के प्रबंधन को बहुत सरल बनाता है; आप उन्हें एक पंक्ति में qsub कर सकते हैं, आप उन्हें एक साथ qdel या qhold कर सकते हैं (जबकि अभी भी अलग-अलग नौकरियों से निपटने की क्षमता है)।

यदि आप ऐसा करते हैं, तो आप एक विश्लेषण नौकरी जमा कर सकते हैं जिसकी नौकरियों की सरणी पर निर्भरता होती है जो सरणी में सभी नौकरियों को पूरा करने के बाद ही चलती है: (सीएफ http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#dependencyExamples)। नौकरी जमा करना इस तरह दिखेगा:

qsub analyze.sh -W depend=afterokarray:427[] 

जहां विश्लेषण करते हैं।श्लोक ने विश्लेषण करने के लिए स्क्रिप्ट किया था, और 427 आपके द्वारा लॉन्च की गई नौकरियों की सरणी की नौकरी आईडी होगी। ([] का अर्थ केवल पूरा होने के बाद ही चलाया जाता है)। वाक्यविन्यास अन्य शेड्यूलर (उदाहरण के लिए, एसजीई/ओजीई) के लिए अलग है लेकिन विचार समान हैं।

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

6

कुछ आप विचार कर सकते हर काम स्क्रिप्ट सिर्फ $i.jobdone की तरह एक समर्पित फ़ोल्डर में एक फ़ाइल नाम स्पर्श कर रहा है, और अपने गुरु लिपि में, आप बस ls *.jobdone | wc -l इस्तेमाल कर सकते हैं कोई कार्य पूरा की सही संख्या के लिए परीक्षण करने के लिए।

1

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

मैं एक छोटे से सी कार्यक्रम प्रतीक्षा और एकत्रित (आप को अपलोड करने और निष्पादनयोग्य चलाने के लिए अनुमति है अगर) करने के लिए लिखना चाहते हैं, लेकिन आप आसानी से उपयोग कर सकते हैं bash इंतजार लगभग एक ही उद्देश्य के लिए निर्मित की, हालांकि उन्होंने कम लचीलापन के साथ।

संपादित करें: छोटा उदाहरण।

#!/bin/bash 

... 
waitfor='' 

for i in tasks; do 
    task & 
    waitfor="$waitfor $!" 
done 

wait $waitfor 
... 

आप पृष्ठभूमि में इस स्क्रिप्ट को चलाने के लिए, यह आप और जो कुछ भी आता है के बाद इंतजार जब अपने काम से अधिक कर रहे लाइन चलेंगे परेशान नहीं करेगा।

संबंधित मुद्दे