2011-10-11 16 views
23

मेरी supervisord.conf में वर्तमान अनुभाग लगता है:कैसे ठीक से supervisord साथ RabbitMQ प्रबंधन करने के लिए

[कार्यक्रम: RabbitMQ] आदेश =/usr/sbin/RabbitMQ-सर्वर

जब मैं रोकने की कोशिश पर्यवेक्षक के साथ खरगोश (पर्यवेक्षक बंद रब्बिटक), खरगोश की प्रक्रिया बस बंद नहीं होती है। खरगोश के दस्तावेज में कभी भी हत्या का उपयोग करने का उल्लेख नहीं किया जाता है बल्कि खरगोशक्क्टल स्टॉप का उपयोग किया जाता है। मैं देख रहा हूं पर्यवेक्षक बस प्रक्रियाओं को मारता है - इसलिए खरगोश के साथ खराब परिणाम। कस्टम स्टॉप कमांड निर्दिष्ट करने के लिए मुझे पर्यवेक्षक में कोई विकल्प नहीं मिला।

क्या आपके पास कोई सिफारिशें हैं?

उत्तर

2

आपने अपने प्रश्न का उत्तर दिया है। सामान्य ऑपरेशन में, किसी भी प्रक्रिया पर हत्या का कभी भी उपयोग न करें जब तक कि इसे प्रबंधित करने का दस्तावेज सामान्य तरीका न हो। RabbitMQ के मामले में, दस्तावेजी प्रक्रिया rabbitmqctl स्टॉप का उपयोग करने या rabbitmqserver स्टॉप का उपयोग करने के लिए है।

खरगोश एमक्यू को शैल स्क्रिप्ट से अधिक परिष्कृत के साथ प्रबंधित करने का कोई अच्छा कारण नहीं है जो rabbitmqserver प्रारंभ के माध्यम से पुनरारंभ करने का प्रयास करता है। अगर यह तुरंत काम नहीं करता है, तो रैपिटएमक्यू कुछ कम हो गया है, रैम की कमी, डिस्क स्पेस से बाहर हो गई है, या एक दुष्ट सिस्टम प्रबंधन उपकरण ने कुछ खरगोश बाइनरी घटकों को हटा दिया है।

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

[program:rabbitmq] 
command=path/to/rabbitmq.sh 
37

मेरे समाधान के रूप में निम्नानुसार एक आवरण स्क्रिप्ट नामित rabbitmq.sh लिखना है), यह रैबिटएमक्यू जैसे डेमॉन के लिए बेहतर है और यह भी समृद्ध है।

सबसे पहले, आपको मोनिट पैकेज इंस्टॉल करना होगा। यदि आप उबंटू/डेबियन के अंतर्गत हैं:

sudo apt-get update 
sudo apt-get install monit 

बाद में, आपको एक कॉन्फ़िगरेशन स्क्रिप्ट बनाना होगा। यहां एक नमूना स्क्रिप्ट है आपके द्वारा चलाए जा पाने के लिए (/etc/monit/conf.d/ पर रखें):

set daemon 1800 
set logfile /var/log/monit.log 

check process rabbit with pidfile /var/run/rabbitmq/pid 
    start program = "/etc/init.d/rabbitmq-server start" 
    stop program = "/etc/init.d/rabbitmq-server stop" 
    noalert [email protected] 

फिर, बस monit पुन: प्रारंभ होता है और आप पूरा कर लें:

sudo /etc/init.d/monit restart 
+3

यह मेरे लिए आंशिक रूप से काम किया। मैंने अपने अंतिम समाधान के साथ एक गिस्ट बनाया: https://gist.github.com/caioariede/342a583f75467509ad42 – caio

+1

@ कैयो हालांकि मेरा समाधान मेरे लिए काम करता है, मुझे आपके लिए धन्यवाद देना चाहिए। –

0

मैं तुम्हें Monit उपयोग की सलाह देंगे http://mmonit.com/:

# call "rabbitmqctl stop" when exiting 
trap "{ echo Stopping rabbitmq; rabbitmqctl stop; exit 0; }" EXIT 

echo Starting rabbitmq 
rabbitmq-server 

उसके बाद, supervisord.conf संशोधित:

+0

यह/var/run/rabbitmq/निर्देशिका में कोई भी पिड फ़ाइल नहीं बना रहा है। –

+0

कमेंटर को कम करने का कोई कारण नहीं है। वास्तव में, अगर उस फ़ाइल पिड के लिए नहीं है (जिसे एक परिवर्तनीय वातावरण के साथ सेट किया जा सकता है तो मोनिट एक पूरी तरह से वैध समाधान हो सकता है ...) –

3

यह स्क्रिप्ट एक पृष्ठभूमि प्रक्रिया के रूप में RabbitMQ शुरू करता है ('&' का उपयोग करके) जो एक पिड फ़ाइल को अद्यतन/निर्मित करने का कारण बनता है (http://www.rabbitmq.com/man/rabbitmqctl.1.man.html के तहत 'प्रतीक्षा करें' देखें)।

खरगोश शुरू होने के बाद, एक लूप का उपयोग यह सत्यापित करने के लिए किया जाता है कि पिड अभी भी चल रहा है। यदि खरगोश दुर्घटनाग्रस्त हो जाता है या मैन्युअल रूप से बंद हो जाता है (पर्यवेक्षक के बाहर) तो स्क्रिप्ट 1 से बाहर निकल जाएगी और पर्यवेक्षक खत्म हो जाएगा।

गूंज >> ./rmq।txt फ़ाइल डीबगिंग उद्देश्यों के लिए है और उत्पादन में टिप्पणी की जा सकती है (मैंने स्टार्टअप/शटडाउन/मृत्यु की स्थिति की निगरानी के लिए इसका इस्तेमाल किया)।

पर्यवेक्षक खुश हैं क्योंकि यह एक चल रही प्रक्रिया देख सकता है और एक एक्सआईटीटी रोकथाम के लिए 'rabbitmqctl stop' कहलाता है जो stop_rmq फ़ंक्शन को ट्रिगर करेगा।

#!/bin/bash 

# Script to manage RMQ with supervisord 

# Shut down rmq 
function stop_rmq { 

    echo "Stopping RabbitMQ..." 
    echo "Stopping RabbitMQ..." >> ./rmq.txt 
    rabbitmqctl stop 
    echo "RabbitMQ stopped" 
    echo "RabbitMQ stopped" >> ./rmq.txt 
    #exit 0 
} 

# Set up the trap 
#trap stop_rabbit TERM KILL HUP INT SIGTERM SIGKILL SIGHUP SIGINT 
trap stop_rmq exit 

# Start rmq 
echo "Starting RabbitMQ..." 
echo "Starting RabbitMQ..." >> ./rmq.txt 
# Start Rabbitmq in the background (causes the pid file to be updated) 
# Note that the pid file location can be overridden with the rmq 'RABBITMQ_PID_FILE' variable 
/usr/sbin/rabbitmq-server & 
rabbitmqctl wait /var/lib/rabbitmq/mnesia/[email protected]$HOSTNAME.pid 
echo "RabbitMQ Started" 
echo "RabbitMQ Started" >> ./rmq.txt 

while true; do 
    #ps $(cat /var/lib/rabbitmq/mnesia/[email protected]$HOSTNAME.pid) 
    ps -o pid,cmd,etime $(cat /var/lib/rabbitmq/mnesia/[email protected]$HOSTNAME.pid) 
    if (($? > 0)); then 
    echo "RabbitMQ Died" 
    echo "RabbitMQ Died" >> ./rmq.txt 
    exit 1 
    fi 
    #echo "Sleeping..." 
    sleep 10 
done 

यहाँ स्क्रिप्ट द्वारा उत्पन्न supervisord को आउटपुट है:

[email protected]:/# supervisorctl tail rmq 

Starting RabbitMQ... 
Waiting for [email protected] ... 
pid is 45220 ... 

       RabbitMQ 3.3.5. Copyright (C) 2007-2014 GoPivotal, Inc. 
    ## ##  Licensed under the MPL. See http://www.rabbitmq.com/ 
    ## ## 
    ########## Logs: /var/log/rabbitmq/[email protected] 
    ###### ##  /var/log/rabbitmq/[email protected] 
    ########## 
       Starting broker... completed with 0 plugins. 
...done. 
RabbitMQ Started 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:05 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:15 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:25 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:35 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:45 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  00:55 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  01:05 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  01:15 
    PID CMD        ELAPSED 
45220 /usr/lib/erlang/erts-6.1/bi  01:25 
संबंधित मुद्दे