2010-10-06 24 views
42

मैं अपने यूनिकॉर्न्स नजर रखने के लिए एक भगवान स्क्रिप्ट पर काम कर रहा हूँ। मैंने गिटहब की उदाहरण स्क्रिप्ट के साथ शुरुआत की और मेरे सर्वर कॉन्फ़िगरेशन से मेल खाने के लिए इसे संशोधित कर रहा हूं। एक बार भगवान चल रहा है, god stop unicorn और god restart unicorn जैसे काम ठीक आदेश देता है।भगवान का प्रयोग यूनिकॉर्न नजर रखने के लिए - प्रारंभ गैर शून्य कोड के साथ बाहर निकल गया = 1

हालांकि, god start unicorn परिणाम WARN: unicorn start command exited with non-zero code = 1 में। अजीब हिस्सा यह है कि अगर मैं सीधे कॉन्फ़िगरेशन फ़ाइल से स्टार्ट स्क्रिप्ट कॉपी करता हूं, तो यह एक ब्रांड नए मस्तंग की तरह शुरू होता है।

यह मेरी शुरुआत आदेश है:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D 

मैं कॉन्फ़िग फ़ाइल में पूर्ण रूप में सभी रास्तों घोषित किया है। कोई भी विचार जो इस स्क्रिप्ट को काम करने से रोक सकता है?

उत्तर

14

मैं एक अनुप्रयोग सर्वर के रूप में गेंडा उपयोग नहीं किया है, लेकिन मैं पहले की निगरानी के लिए भगवान का उपयोग किया है।

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

god status चल रहा एक बार आप भगवान शुरू कर दिया है के द्वारा इस चेक। अगर ऐसी बात नहीं है आप कमांड लाइन पर जांच कर सकते हैं comand के जाने स्थिति क्या है:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D; echo $?;

कि गूंज पिछले आदेश के निकास स्थिति प्रिंट होगा। यदि यह शून्य है, तो अंतिम कमांड ने कोई त्रुटि नहीं दी है। एक पंक्ति में दो बार यूनिकॉर्न शुरू करने का प्रयास करें, मुझे उम्मीद है कि दूसरी बार यह 1 लौटाएगा, क्योंकि यह पहले से चल रहा है।

संपादित करें:

आप एक स्पष्ट उपयोगकर्ता और समूह सेट कर सकते हैं यदि आपके प्रक्रिया की आवश्यकता है एक विशिष्ट उपयोगकर्ता के रूप में चलाने के लिए:

टिप्पणियों से वास्तविक समाधान सहित

, इस के रूप में एक लोकप्रिय प्रतिक्रिया हो रहा है।

God.watch do |w| 
    w.uid = 'root' 
    w.gid = 'root' 

    # remainder of config 
end 
+0

दिलचस्प ... यह वास्तव में एक अच्छा सुझाव था। मैंने शुरुआत के आउटपुट को पढ़ने और ईश्वर के बाहर निष्पादित होने पर आदेशों को रोकने के लिए इको अतिरिक्त का उपयोग किया। वे दोनों '0' के मूल्य से निकल गए। हालांकि, जब भगवान द्वारा समान आदेशों को निष्पादित किया जाता है, तो यह '1' के मान से निकलता है। सभी प्रक्रियाओं को रूट के रूप में शुरू किया जाना चाहिए ... भगवान और यूनिकोरन दोनों। मुझे आश्चर्य है कि यहां एक अतिव्यापी अनुमतियां त्रुटि है या नहीं। क्या यह एक व्यावहारिक उत्तर की तरह लगता है? – mindtonic

+1

हाँ ऐसा लगता है जैसे भगवान रूट के रूप में चल रहा है, यह कमांड को किसी अन्य उपयोगकर्ता के रूप में निष्पादित कर सकता है? ऐसा लगता है कि आप उपयोगकर्ता भगवान को आदेशों को चला सकते हैं: God.watch do | w | ... w.uid = 'जड़' w.gid = 'जड़' ... अंत – Jeremy

0

मेरी समस्या यह थी कि मैंने कभी रूट के रूप में बंडल नहीं किया था। यहाँ मैं क्या किया है:

sudo bash 
cd RAILS_ROOT 
bundle 

बताने के लिए आपको ऐसा करने के लिए कभी नहीं करने के लिए एक चेतावनी मिलती है:

रूट के रूप में Bundler भागो मत। यदि बंडलर की आवश्यकता है, तो बंडलर सूडो के लिए पूछ सकता है, और रूट के रूप में अपना बंडल इंस्टॉल करने से इस मशीन पर सभी गैर रूट उपयोगकर्ताओं के लिए इस एप्लिकेशन को तोड़ दिया जाएगा।

लेकिन यह एकमात्र तरीका था जिसे मैं भगवान के साथ दौड़ने के लिए रेज या यूनिकर्न प्राप्त कर सकता था। यह एक ec2 उदाहरण पर था अगर यह किसी की मदद करता है।

0

लॉग विकल्प जोड़ें मुझे डिबगिंग में काफी मदद मिली है।

God.watch do |w| 
    w.log = "#{RAILS_ROOT}/log/god.log" 

    # remainder of config 
end 

अंत में, मेरा बग निकला भगवान में start_scriptdevelopment वातावरण में मार डाला गया था किया जाना है।मैंने इसे RAILS_ENV को स्टार्ट स्क्रिप्ट में जोड़कर तय किया है।

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C#{config_file} -L #{log_file} -d"