Как правильно управлять rabbitmq с помощью supervisord

Текущий раздел в моем supervisord.conf выглядит так:

[program: rabbitmq] {{ 1}} command = / usr / sbin / rabbitmq-server

Когда я пытаюсь остановить rabbitmq с помощью supervisord (supervisorctl stop rabbitmq), процессы rabbitmq просто не завершаются. В документации rabbitmq также упоминается никогда не использовать kill, а использовать rabbitmqctl stop. Я предполагаю, что supervisord просто убивает процессы - отсюда и плохие результаты с rabbitmq. Я не смог найти никаких параметров в supervisord для указания пользовательской команды остановки.

Есть ли у вас какие-либо рекомендации?

24
задан Brian Kelly 12 October 2011 в 04:51
поделиться

2 ответа

Я бы посоветовал вам использовать Monit ( http://mmonit.com/ ), он лучше подходит для таких демонов, как RabbitMQ, и он также многофункциональный.

Прежде всего, вы должны установить пакет Monit. Если вы находитесь в Ubuntu / Debian:

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 foo@bar

Затем просто перезапустите monit, и вы закончите:

 sudo /etc/init.d/monit restart
1
ответ дан 28 November 2019 в 23:33
поделиться

Этот скрипт запускает RabbitMQ в качестве фонового процесса (с использованием & amp;), который вызывает обновление / создание файла pid (см. «Wait» в http://www.rabbitmq.com/man/rabbitmqctl). .1.man.html ).

После того, как кролик был запущен, используется цикл, чтобы убедиться, что пид все еще работает. Если кролик падает или выключается вручную (за пределами супервизора), сценарий завершается с 1, и супервизор вступает во владение.

Файл echo >> ./rmq.txt предназначен для отладки и может быть закомментирован в процессе производства (я использовал его для мониторинга состояния запуска / выключения / отключения).

supervisord счастлив, потому что он может видеть запущенный процесс, и EXIT запускает функцию stop_rmq, которая вызывает «rabbitmqctl stop» для чистого отключения.

#!/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/rabbit@$HOSTNAME.pid
echo "RabbitMQ Started"
echo "RabbitMQ Started" >> ./rmq.txt

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

Вот вывод, сгенерированный сценарием для супервизора:

foo@bar:/# supervisorctl tail rmq

Starting RabbitMQ...
Waiting for rabbit@a2d2c8f9cad2 ...
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/rabbit@a2d2c8f9cad2.log
  ######  ##        /var/log/rabbitmq/rabbit@a2d2c8f9cad2-sasl.log
  ##########
              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
3
ответ дан 28 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: