2011-12-30 11 views
28

प्रारंभ करना हम समानांतर में विभिन्न कार्यों को चलाने के लिए PHP गियरमैन श्रमिकों का उपयोग करते हैं। सब कुछ ठीक काम करता है, और जब मैं उन्हें चाहता हूं तो उन्हें स्पिन करने के लिए मूर्खतापूर्ण छोटी खोल स्क्रिप्ट होती है। एक प्रोग्रामर होने के नाते (और इसलिए आलसी), मैं देखना चाहता था कि क्या मैं इसे अपस्टार्ट स्क्रिप्ट के माध्यम से स्पिन कर सकता हूं।कई अपस्टार्ट इंस्टेंस स्वचालित रूप से

मैं पता लगा कि कैसे उदाहरण छंद उपयोग करने के लिए, तो मैं उन्हें एक उदाहरण संख्या के साथ शुरू कर सकता है:

description "Async insert workers" 
author  "Mike Grunder" 

env SCRIPT_PATH="/path/to/my/script" 

instance $N 

script 
    php $SCRIPT_PATH/worker.php 
end script 

और यह उन्हें इतना की तरह शुरू करने के लिए महान काम करता है,:

sudo start async-worker N=1 
sudo start async-worker N=2 

जिस तरह से मैं इन श्रमिकों का उपयोग करना चाहता हूं उनमें से कुछ संख्या (शायद एक प्रति कोर, आदि) को स्पिन करना है, और मैं इसे स्टार्टअप पर करना चाहता हूं। स्पष्ट होने के लिए, मुझे कोर की संख्या का पता लगाने के लिए अपस्टार्ट स्क्रिप्ट की आवश्यकता नहीं है। मुझे बस "उदाहरण 8 उदाहरण" कहने में खुशी है, लेकिन यही कारण है कि मैं कई रनिंग चाहता हूं। क्या यह स्वचालित रूप से ऐसा करने के लिए अपस्टार्ट स्क्रिप्ट में "प्रारंभ करें" खंड का उपयोग करने का कोई तरीका है?

उदाहरण के लिए, उदाहरण 1, 2, 3, 4 शुरू करें? फिर उन्हें शटडाउन पर ठीक से बाहर निकलें?

मुझे लगता है कि मैं इसे init.d स्क्रिप्ट में लगा सकता हूं, लेकिन मैं सोच रहा था कि अपस्टार्ट इस तरह कुछ संभाल सकता है, या अगर किसी ने इस मुद्दे को समझ लिया है।

चीयर्स दोस्तों!

उत्तर

40

आपको एक बूटस्ट्रैप कार्य है जो स्टार्टअप पर चलता है और प्रत्येक कार्यकर्ता नौकरियों पर पुनरावृत्ति करता है।

#/etc/init/async-workers-all.conf 

start on runlevel [2345] 

task 

env NUM_WORKERS=8 

script 
    for i in `seq 1 $NUM_WORKERS` 
    do 
    start async-worker N=$i 
    done 
end script 

कुंजी यह एक कार्य है, जो इसके लिए किसी भी घटनाओं उत्सर्जन से पहले पूरा होने के लिए कार्य चलने देने के लिए कल का नवाब बताता बनाना है। http://upstart.ubuntu.com/cookbook/#task और http://upstart.ubuntu.com/cookbook/#instance

+0

बहुत बहुत धन्यवाद! मैंने इसे इसी तरह से काम करने की कोशिश की, लेकिन मुझे 'टास्क' बिट लापता था, इसलिए लूप का पहला पुनरावृत्ति बस ब्लॉक होगा। बहुत बढ़िया। :) – mkgrunder

+11

आपको http://stackoverflow.com/questions/12084025/restarting-upstart-instance-prcesses भी चेकआउट करना चाहिए जो न केवल कई उदाहरण शुरू करने की अनुमति देता है, बल्कि उन्हें रोक भी देता है। – Evgeny

+0

मैंने प्रलेखन पढ़ा है लेकिन मुझे अभी भी यह नहीं मिला है, यह लूप अपने पहले पुनरावृत्ति में क्यों अवरुद्ध है जब तक कि यह कोई कार्य न हो?/सीसी @ एमकेग्रंडर – Mahn

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