task :restart_unicorn, :except => { :no_release => true } do
run "#{try_sudo} kill -s USR2 $(cat /var/www/app_name/shared/pids/unicorn.pid)"
end
तैनात जब मैं सर्वर पर sudo kill -s USR2 $(cat /var/www/app_name/shared/pids/unicorn.pid)
कर पुराने कोड निम्न का उपयोग कर रहा है, क्या होता है कि एक नए गेंडा गुरु बनाया जाता है, और पुराने एक (old)
अपने नाम के साथ जोड़ दिया गया है। बूढ़ा व्यक्ति कभी नहीं मारा जाता है, लेकिन अगर मैं इसे अपने आप मारता हूं, तो भी नया यूनिकॉर्न इंस्टेंस अभी भी मेरे तैनाती से पहले पुराना कोड दिखा रहा है। नए उदाहरण में पुराने निर्माण के समान ही समय है - जैसे कि इसे सिर्फ डुप्लिकेट किया जा रहा है। अगर मैं इंस्टेंस को रोकता हूं, और इसे फिर से शुरू करता हूं, तो यह काम करता है, लेकिन मैं शून्य-डाउनटाइम तैनाती करने में सक्षम होना चाहता हूं।यूनिकॉर्न + पुनः आरंभ
किसी भी मदद की सराहना की जाती है।
old_pid = get_pid('/var/www/appname/shared/pids/unicorn.pid')
run "#{try_sudo} kill -s SIGUSR2 $(cat /var/www/appname/shared/pids/unicorn.pid)"
/var/www/app/current/tmp/pids/unicorn.pid)"
run "#{try_sudo} kill -s SIGWINCH #{old_pid}"
इस पीआईडी पर SIGUSR2 चलाता है, और वर्ष गेंडा प्रक्रिया को मारता है:
संपादित
sugest इल्या ओ पालन करने के बाद, मैं एक Capistrano कार्य है कि इस करता है बनाया। समस्या यह है कि मेरा सभी एप्लिकेशन सर्वर कभी भी मेरे हाल ही में तैनात कोड में अपडेट नहीं किया गया है, यह कार्य बस मेरे पुराने यूनिकर्न वातावरण को एक नई प्रक्रिया में कॉपी करने लगता है। यह ठीक काम करता है अगर मैं बस मास्टर प्रक्रिया को मारता हूं और फिर यूनिकॉर्न ताजा फिर से शुरू करता हूं, लेकिन फिर एक मिनट या उससे भी कम अनुरोध किए जाते हैं।
हां, 'preload_app' सत्य पर सेट है। महान जानकारी!मेरा एकमात्र सवाल यह है कि पुरानी यूनिकॉर्न प्रक्रिया आईडी क्या है यह पहचानने का सबसे अच्छा तरीका क्या है? –
.oldbin या (पुराने) वर्ष प्रक्रिया के नाम के साथ जोड़ दिया जाएगा ताकि पाइप 'के लिए गेंडा और पुराने –
एक' grep' को ps' मैं एक अद्यतन के साथ ओपी संपादित आप कर सकते थे। अब तक दी गई सहायता के लिए धन्यवाद। –