2012-06-04 9 views
11

Capistrano कार्यशुभारंभ पृष्ठभूमि प्रक्रिया

namespace :service do 
    desc "start daemontools (svscan/supervise/svscanboot)" 
    task :start, :roles => :app do 
    sudo "svscanboot&" 
    end 
end 

अब यह काम नहीं करता: svscanboot प्रक्रिया बस नहीं चलता है। इससे मुझे sleep: https://github.com/defunkt/resque/issues/284 अन्य स्रोतों ने मुझे nohup, redirection, और pty => true पर इंगित करने में मदद की, इसलिए मैंने इन सभी को आजमाया।

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &" # NO 
run "(svscanboot&) && sleep 1"      # NO 
run "(nohup svscanboot&) && sleep 1"     # YES! 

अब, क्या कोई मुझे बता सकता है कि मुझे नींद का बयान क्यों चाहिए और नोहप क्या अंतर करता है? रिकॉर्ड के लिए सभी उपरोक्त रन समान रूप से अच्छी तरह से चलते हैं यदि उपयोगकर्ता खोल से चलाया जाता है, तो समस्या केवल कैपिस्ट्रानो के संदर्भ में होती है।

धन्यवाद

+0

'नोहुप' यह सुनिश्चित करता है कि जब आप खोल समाप्त होने के बाद 'SIGHUP' सिग्नल प्राप्त करते हैं तो आपका आदेश समाप्त नहीं होता है। हालांकि, मैं भी उत्सुक हूं कि नींद कमांड क्यों फर्क पड़ता है। – Graeme

+0

नींद मेरी दुनिया में भी एक फर्क पड़ता है। यह रहस्यमय है कि कैपिस्ट्रानो के साथ इतना आसान काम इतना आश्चर्यजनक क्यों है। – cbmanica

+0

मुझे वही व्यवहार दिखाई देता है। और एक ही चीज़ के बारे में सोच रहा है। – aslakjo

उत्तर

0

मुझे लगता है कि nohup बस पृष्ठभूमि में प्रक्रिया शुरू करता है, इसलिए आपको अंतिम 01 को स्पष्ट रूप से सेट करने की आवश्यकता नहीं है।

आप

run "nohup svscanboot >/tmp/svscanboot.log 2>&1"

कोशिश (बिना समाप्त होने & पृष्ठभूमि को भेजने के लिए) किया।

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

0

इस

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 & sleep 5", pty: false 
0

मैं अपने समाधान जो भी जब कई आदेशों को क्रियान्वित करने से काम करता है साझा करना चाहते हैं की कोशिश करो। मैंने "नींद एन" हैक सहित ऑनलाइन कई अन्य प्रकारों को आजमाया।

run("nohup sh -c 'cd #{release_path} && bundle exec rake task_namespace:task_name RAILS_ENV=production > ~/shared/log/<rakelog>.log &' > /dev/null 2>&1", :pty => true) 
1

मेरा सरल समाधान दूरस्थ सर्वर पर svscanboot.sh फ़ाइल को जो भी कोड आप चलाने के लिए चाहते हैं, बना देगा। अपने मामले

svscanboot >/tmp/svscanboot.log 2>&1 

टोपी रेक कार्य में इस

run "sh +x somefile.sh &" 

यह मेरे लिए अच्छी तरह से काम जोड़ें।