Erlang 机器立即停止(分发名称冲突?)。服务未重新启动,因为 OnFail 设置为忽略

Posted

技术标签:

【中文标题】Erlang 机器立即停止(分发名称冲突?)。服务未重新启动,因为 OnFail 设置为忽略【英文标题】:Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as OnFail is set to ignore 【发布时间】:2016-01-04 21:21:59 【问题描述】:

我正在使用 RabbitMQ。由于某种原因,rabbitMQ 服务在您启动后立即停止。我在事件日志中看到以下错误:

RabbitMQ: Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as OnFail is set to ignore.

有人告诉我运行这个命令:erl -sname rabbit

此命令生成以下输出:

(no error logger present")i neirtr otre: r"mEirnraotri nign  ipnr odcoe_sbso o<
t0".,2.b0a>d awrigt,h[ eexrilt_p rviaml_uleo:a debra,dcahregc,k[_feirlle__pr
reismu_llto,a3d,e[r,fcihleec,k"_efrill_e_prreismu_llto,a3d,e[r.feirlle",\,"e
lriln_ep,r29i3m_]lo,adienri.te,rgle\t"_b,oolti,n1e,,[29f3il]e,,"iinniit
t.,egrelt"_b,oolti,n1e,,[789fi]le,,\i"niinti,tg.eetr_lb\o"ot,,2l,i[nef,
i7l8e9,"]in,iti.neirtl,"ge,t_lbionoet,,7762,][,fiilnei,t\,"dion_ibto.oe
tr,l3\,"[,fillien,e",i77n6it].e,rli"ni,t,ldion_eb,o74o3t,]3,][f
ile,\"init.erl\",line,743]]\n"

我不确定如何解释这个输出。我想知道这个错误是 RabbitMQ 或 erlang 所特有的。

我不知道如何进行。请建议。

【问题讨论】:

好的,欢迎来到俱乐部!我坐在那里四处搜索 - 有一个类似的问题,导致你描述的错误。我删除了旧版本并尝试安装 3.5.6。然后我启动了“rabbitmq-server.bat”文件,它向我展示了它试图登录到 c:\logs - 在我的盒子里,它是一个目录.....接下来的几个小时我花了很多时间来更改logdirectory,但我所有更改它的尝试都失败了。如果我删除该日志目录,兔子就会启动。所以它似乎忽略了我通过配置文件或环境变量来覆盖所有日志定义的所有尝试。 对我来说,问题是 RabbitMQ 配置(基本)文件夹中缺少 advanced.config 文件。在 RabbitMQ 日志中的任何地方都没有提到这个问题,但是一个 Erlang 崩溃日志(转储)文件整齐地存在于基本目录中。它解释了根本原因。 【参考方案1】:

我发现与 env 变量的名称冲突,多年来我一直在使用 - 意思是,这与以前的版本没有问题。 我有“日志”,应用程序将写入该目录,通常使用它们自己的子目录。 RMQ 使用相同的变量名并表示纯文件名。 所以使用: "C:\Users\rabbit\AppData\Roaming\RabbitMQ\log\log" 使它对我有用 - 这是在兔子的用户私人环境中。因此,兔子现在看不到全局设置。呃。看起来,这实际上是一个文件名,在我再次将其更改为“rabbit@c4711-node.log”后,它的写入方式与早期版本一样。该服务现在开始为我服务 - 但这真的很混乱,我现在不相信它;-)

【讨论】:

在哪里可以找到rabbit's users private environement variables ? 您设置的变量名称是什么?能否请您提供更多信息。 在我的机器上,我没有看到为 rabbitmq 设置的任何环境变量。当我单击运行并输入%APPDATA% 时,我没有看到此文件夹下的rabbitmq 文件夹。我想知道在哪里可以找到rabbitmq使用的所有变量?【参考方案2】:

在我看来,应该在自己的帐户下运行这样的服务。如果该服务已经存在,请创建一个本地用户帐户 - 我使用了“兔子”并给它一个密码。我创建的帐户从我这里获得了管理员权限 - 但我目前只是不知道,这是需要的。至少它不应该——稍后会看到。如果您有帐户/凭据,请转到服务管理器并单击服务的属性。在第二个选项卡(“登录”)上,选中“此帐户”并输入用户名和密码。如果您有该服务的帐户,您应该可以使用用户登录。 然后您可以指定具有用户范围的环境变量。 为此,请使用您创建的用户登录。转到控制面板/系统并单击“高级”:

在环境 UI 中,输入用户特定的变量 在顶部面板中:

注意:这不是我的兔子用户,因为我目前无法在那里登录。我输入的变量 - 不保证,它是正确的 - 如下:

RABBITMQ_BASE=C:\Users\rabbit\AppData\Roaming\RabbitMQ
RABBITMQ_CONFIG_FILE=C:\Users\rabbit\AppData\Roaming\RabbitMQ\rabbitmq
RABBITMQ_LOGS=C:\Users\rabbit\AppData\Roaming\RabbitMQ\log
RABBITMQ_LOG_BASE=C:\Users\rabbit\AppData\Roaming\RabbitMQ\log
RABBITMQ_NODE_IP_ADDRESS=192.168.26.3

这对我有用。 上次我安装它 - 几年前 - 更好理解 - 这次,对不起,我不...... 但让它工作。

【讨论】:

【参考方案3】:

唯一对我有用的是清除目录C:\Users\xxxxx\AppData\Roaming\RabbitMQ

(参见https://groups.google.com/forum/#!topic/rabbitmq-users/138RHzzsORU)

【讨论】:

【参考方案4】:

我刚刚在新的 Windows 服务器上将 RabbitMq 设置为服务时遇到了这个问题。我能想到的唯一一件事就是在安装 RabbitMq 服务之后重命名新的 windows 框,但在第一次测试它之前。

首先我注意到它作为应用程序运行良好。我通过使用manual install instructions 中的命令再次安装服务解决了这个问题:

rabbitmq-service install

假设您为 RabbitMq sbin 目录包含路径变量。

【讨论】:

我在将 RabbitMQ 安装到 Windows AMI 时遇到了这个问题。基于镜像的新实例在重新安装之前无法启动 RabbitMQ。【参考方案5】:

我在 Windows Server 2016 上通过 Chocolatey 安装 RabbitMQ 3.7.17 时遇到了同样的问题。

在尝试了大多数建议的解决方案后,对我有用的是:

rabbitmq-service remove
rabbitmq-service install
rabbitmq-service start

PS:如果您的 PATH 没有为 RabbitMQ 配置,这是您需要从以下位置运行命令的文件夹:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.17\sbin(如果您的版本也是 3.7.17)。

【讨论】:

【参考方案6】:

对于查找此错误的其他人:仔细检查您的配置文件和 SSL 文件。当我使用 ca.pem 指定 ssl_options.cacertfile 时遇到了这个问题,但该文件在目录中被错误输入为 ca-pem。不幸的是,RabbitMQ 不够聪明,无法捕捉丢失的文件,并且在没有日志的情况下转储。

【讨论】:

【参考方案7】:

根据此处的 RabbitMQ 在 Windows 上安装指南

作为服务运行时的故障排除

如果 Erlang VM 在 RabbitMQ 运行时崩溃 一个服务,而不是将故障转储写入当前目录 (这对服务没有意义)它被写入 RabbitMQ 服务器基目录中的 erl_crash.dump 文件(设置 通过 RABBITMQ_BASE 环境变量,默认为 %APPDATA%\%RABBITMQ_SERVICENAME% - 通常是 %APPDATA%\RabbitMQ 否则)。

基本上这意味着添加一个名为 RABBITMQ_BASE 的环境变量,其值为 %APPDATA%\RabbitMQ

这解决了我的问题。

【讨论】:

【参考方案8】:

在我的场景中,C:\Program Files 下有两个不同版本的 Erlang 目录,我卸载了其中一个版本,还从 Windows 服务列表中卸载了 RabbitMQ 服务 - 重新启动系统。

再次运行 RabbitMQ 设置 - RabbitMQ 服务设置成功。

【讨论】:

【参考方案9】:

我遇到了这个问题,我可以解决的唯一方法是卸载 RabbitMQ,卸载 Erlang,重新启动服务器并安装一个干净的 Erlang 和一个干净的 RabbitMQ。 经过这一切,我终于可以将 RabbitMQ 实例安装并启动为 Windows 服务了。

尝试了这篇文章中的所有解决方案,但没有任何效果。

幸运的是,它在我们的开发服务器中,所以损失是可以接受的。

这种方法的缺点是您会丢失所有配置(所有用户、虚拟主机等)。 一切都消失了,您必须从头开始重新配置 RabbitMQ 实例。

【讨论】:

【参考方案10】:

从 2021 年开始入住:

这些都不适合我,问题实际上是我在 WSL Ubuntu 发行版中运行了另一个 RabbitMQ 实例。

【讨论】:

【参考方案11】:

我遇到了同样的问题,我刚刚下载了最新版本的 erlang 和 RabbitmQ,这解决了我的问题。

【讨论】:

以上是关于Erlang 机器立即停止(分发名称冲突?)。服务未重新启动,因为 OnFail 设置为忽略的主要内容,如果未能解决你的问题,请参考以下文章

erlang node_name phash 冲突坑

Windows 服务(托管 WCF 服务)在启动时立即停止

RabbitMQ无法启动,TCP连接成功但Erlang分发失败

分发一个 Erlang 聊天系统

如何分发 Erlang 进程(主管行为)?

基于 Erlang 的聊天(负载平衡和通知分发)