यह एक हैक है, लेकिन मैंने सफलतापूर्वक एक यूनिकॉर्न कॉन्फ़िगरेशन फ़ाइल बनाई है जो TERM
सिग्नल को जालती है, जो यूनिकॉर्न को प्राप्त करने से रोकती है और इसे तुरंत बंद कर देती है। मेरा सिग्नल हैंडलर QUIT
भेजता है जो यूनिकॉर्न सुंदर शटडाउन को ट्रिगर करने के लिए स्वयं को सिग्नल करता है।
रूबी 1.9.2, यूनिकॉर्न 4.0.1 और 4.2.1, मैक ओएस एक्स के साथ परीक्षण किया गया
listen 9292
worker_processes 1
# This is a hack. The code is run with 'before_fork' so it runs
# *after* Unicorn installs its own TERM signal handler (which makes
# this highly dependent on the Unicorn implementation details).
#
# We install our own signal handler for TERM and simply re-send a QUIT
# signal to our self.
before_fork do |_server, _worker|
Signal.trap 'TERM' do
puts 'intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
end
एक चिंता यह है कि (मेरा मानना है कि) है इस संकेत हैंडलर कार्यकर्ता प्रक्रियाओं द्वारा विरासत में मिली है। लेकिन, कार्यकर्ता प्रक्रिया अपना TERM
हैंडलर स्थापित करती है, जिसे इसे ओवरराइट करना चाहिए, इसलिए मुझे किसी भी मुद्दे की उम्मीद नहीं होगी। (Unicorn::HttpServer#init_worker_process @ lib/unicorn/http_server.rb:551
देखें
संपादित करें:।। एक और अधिक विस्तार, इस ब्लॉक को स्थापित करता है कि संकेत हैंडलर क्योंकि before_fork
(वर्कर प्रोसेस प्रति एक बार चलेंगे), लेकिन यह केवल निरर्थक और को प्रभावित नहीं करेगा कुछ भी
मैं जानता हूँ कि didin't मैं एक परियोजना के लिए गेंडा विचार कर रहा था, लेकिन यह मुझे बनाता है। पुनर्विचार करना। यहां सिग्नल हैं जो पतले उपयोग करते हैं: https://github.com/macournoyer/thin/blob/master/lib/thin/server.rb#L211 दोनों मामलों में, QUIT एक सुंदर शट डाउन सिग्नल करता है, लेकिन आईएनटी और टीईआरएम बदल जाते हैं। –
बीटीडब्ल्यू, यहां एक और कारक है - Heroku Procfile में परिभाषित प्रक्रिया में टीईआरएम भेज देगा, लेकिन फिर यह प्रक्रिया सिग्नल को सौंपने के लिए ज़िम्मेदार है क्योंकि यह फिट दिखाई देती है। तो यदि आप अपने सर्वर को बंडल निष्पादन के पीछे चला रहे हैं, भले ही उसकाोकू सही सिग्नल भेज रहा हो, तो आप उपर्युक्त व्यवहार देखेंगे क्योंकि वेबसर्वर को संकेत नहीं मिलता है। मैंने इसके बारे में समर्थन करने के लिए बात की है और वे समाधान के साथ आ रहे हैं। –
मुझे आज यह पता चला है, मैंने अभी तक इसका पता नहीं लगाया है: https://github.com/ddollar/foreman/wiki/Custom-Signals –