use*_*054 24 rabbitmq supervisord
我的supervisord.conf中的当前部分如下所示:
[program:rabbitmq] command =/usr/sbin/rabbitmq-server
当我试图用supervisord(supervisorctl stop rabbitmq)停止rabbitmq时,rabbitmq进程根本就没有关闭.rabbitmq文档还提到永远不要使用kill,而是使用rabbitmqctl stop.我猜测supervisord只会杀死进程 - 因此使用rabbitmq会导致糟糕的结果.我在supervisord中找不到任何选项来指定自定义停止命令.
你有什么建议?
Hui*_*eng 36
我的解决方案是编写一个名为rabbitmq.sh的包装脚本,如下所示:
# call "rabbitmqctl stop" when exiting
trap "{ echo Stopping rabbitmq; rabbitmqctl stop; exit 0; }" EXIT
echo Starting rabbitmq
rabbitmq-server
Run Code Online (Sandbox Code Playgroud)
之后,修改supervisord.conf:
[program:rabbitmq]
command=path/to/rabbitmq.sh
Run Code Online (Sandbox Code Playgroud)
你已经回答了你自己的问题。在正常操作中,切勿对任何进程使用kill,除非这是记录的正常管理方式。对于 RabbitMQ,记录的过程是使用rabbitmqctl stop 或使用rabbitmqserver stop。
没有充分的理由使用任何比 shell 脚本更复杂的东西来管理 RabbitMQ,该 shell 脚本会尝试通过rabbitmqserver start 重新启动。如果这不能立即起作用,那么 RabbitMQ 会由于 RAM 不足、磁盘空间不足或流氓系统管理工具删除了一些rabbitmq 二进制组件等原因而严重崩溃。
在正常操作中,RabbitMQ 有一个内部管理程序,它将尝试关闭并重新启动 RabbitMQ,因此如果删除二进制文件,它将无法重新启动。使用chef、puppet、cfengine等工具时,不要重复推送二进制包文件。只需检查一切是否都按其应有的方式存在即可。