2011-02-07 14 views
8

से शैल डिमन को कैसे शुरू करें और रोकें कैसे मैं शैल डिमन शुरू करूंगा और फिर इसे उसी रूबी स्क्रिप्ट के भीतर से रोकूं?रुबी

अधिक विशिष्ट होना करने के लिए, मैं अपने रूबी स्क्रिप्ट चाहते हैं:

  • एक शेल कमांड के साथ एक सर्वर डेमॉन शुरू (rails server | shotgun | आदि ...)।
  • सर्वर चल रहा है, जबकि कुछ चीजें करते हैं।
  • सर्वर को छोड़ दें।

रूबी 1.8/1.9 और यूनिक्स/विंडोज़ में समर्थित सभी गले लगाने वाले समाधानों को प्राथमिकता दी जाती है। (उदाहरण के लिए मैंने fork पढ़ा है विंडोज़ पर काम नहीं करता है)।

+0

मुझे यकीन नहीं है कि आपकी धारणा है कि कर्नेल :: कांटा विंडोज पर काम नहीं करता है। मैं कर्नेल :: exec, कर्नेल :: कांटा, कर्नेल :: सिस्टम के साथ प्रयोग करने में कुछ समय व्यतीत करूंगा और देख सकता हूं कि वे आपके लिए कैसे व्यवहार करते हैं। –

+0

जॉर्डन, मैं विंडोज का उपयोग नहीं करता। मैं सिर्फ खिड़कियों पर अपेक्षित व्यवहार के रूप में व्यवहार नहीं कर रहा था (जैसे यहां: http://www.ruby-forum.com/topic/215939)। –

उत्तर

3

मैं अत्यधिक Ruby Daemons gem की सिफारिश कर सकता हूं। मुझे लगता है कि इसमें आपकी सभी कार्यक्षमताएं हैं।

अपने रीडमे के सेक्शन 3 की जांच करें, और Daemons.call विधि पर विशेष ध्यान दें जो मनमाने ढंग से कोड को डिमननाइज़ करने की अनुमति देता है (जिसमें आप केवल Kernel.system एप कर सकते हैं)।

+0

@ पावेल: डर्म के erm, हाँ, सेक्शन 3: "किसी अन्य एप्लिकेशन से डिमन्स का एक गुच्छा नियंत्रित करें" ... हां यह आंशिक रूप से डिमोनाइजिंग के लिए है, लेकिन अन्य ऐप्स को डिमोनिज़ करने के लिए भी! – Peter

0

यहाँ समाधान खिड़कियों कमांड लाइन का उपयोग करता है काम कर के साथ इसी तरह की समस्या है:

https://serverfault.com/questions/35305/cmd-exe-how-to-starts-a-background-process-run-some-things-stops-background-pr

यह काफी गंदा है, लेकिन यह काम कर देता है।

यदि आप कर सकते हैं तो लिनक्स का उपयोग करें, या केवल मूल कमांड लाइन टूल्स (विंडोज़ के लिए गिट के साथ स्थापित) के साथ बाश करें। बैश के साथ, समाधान बहुत आसान है:

./script/rails server --pid server.pid & 
ruby do_your_stuff.rb 
kill `cat server.pid` 

पीएस वैसे भी रेल के लिए विंडोज़ की सिफारिश नहीं की जाती है। लिनक्स पर स्विच करके आप लंबे समय तक अधिक समय बचा सकते हैं, क्योंकि आप इस तरह की पर्यावरणीय समस्याओं को हल नहीं करेंगे।

0

मैं समझ नहीं सकता कैसे क्या मैं रूबी डेमॉन मणि पीटर सुझाव के साथ की जरूरत है, और इसके बजाय systemu का उपयोग कर समाप्त हो गया करने के लिए:

# command to start daemon 
command = "thin start" # here starting thin server as example 
status, stdout, stderr = systemu command do |cid| 
    # do stuff here 
    # ... 

    Process.kill 9, cid # kill the daemon 
end 
+0

रेल के साथ डेमन्स मणि का उपयोग करने के लिए आपको daemon_generator प्लगइन का उपयोग करना चाहिए। http://douglasfshearer.com/blog/cron-jobs-in-ruby-on-rails –

+0

धन्यवाद, लेकिन मैं रेल का उपयोग नहीं कर रहा हूं। –

0

(रूबी एक Daemon के रूप में राड मणि पर एक नजर डालें) https://github.com/colinsurprenant/raad - यह एमआरआई रूबी और जेआरबी के साथ पारदर्शी रूप से काम करेगा। (मैं लेखक हूँ)।