这个问题发生在部署一套新的环境。搭建一个单节点的Rabbitmq,搭建步骤并无按照我在单机版Rabbitmq部署这篇文章的步骤,而是按照同事写的部署文档搭建的。其中有一些细微的差异,好比修改配置文件。html
部署环境:centos7node
步骤以下:
一、先安装erlang;
二、安装Rabbitmq的rpm包
三、修改配置文件
四、启动服务shell
可是在启动的时候,失败了:centos
[root@vm193-168-1-66 ~]# systemctl start rabbitmq-server Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
根据提示查看日志systemctl status rabbitmq-server.service:cookie
[root@vm193-168-1-66 ~]# systemctl status rabbitmq-server.service ● rabbitmq-server.service - RabbitMQ broker Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled) Active: activating (auto-restart) (Result: exit-code) since Tue 2019-12-17 09:12:50 CST; 8s ago Process: 5378 ExecStop=/usr/sbin/rabbitmqctl shutdown (code=exited, status=69) Process: 5143 ExecStart=/usr/sbin/rabbitmq-server (code=exited, status=64) Main PID: 5143 (code=exited, status=64) Dec 17 09:12:50 vm193-168-1-66 systemd[1]: Failed to start RabbitMQ broker. Dec 17 09:12:50 vm193-168-1-66 systemd[1]: Unit rabbitmq-server.service entered failed state. Dec 17 09:12:50 vm193-168-1-66 systemd[1]: rabbitmq-server.service failed.
并无找到很是明显的缘由ssh
再查看系统日志,一样的结果:ide
[root@vm193-168-1-66 ~]# journalctl -xe Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: * epmd reports: node 'rabbit' not running at all Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: no other nodes on vm193-168-1-66 Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: * suggestion: start the node Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: Current node details: Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: * node name: 'rabbitmqcli-13769-rabbit@vm193-168-1-66' Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: * effective user's home directory: /var/lib/rabbitmq Dec 17 09:15:42 vm193-168-1-66 rabbitmqctl[13769]: * Erlang cookie hash: WQikY88cKw2MYZAMQRGnMA== Dec 17 09:15:42 vm193-168-1-66 systemd[1]: Failed to start RabbitMQ broker. -- Subject: Unit rabbitmq-server.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit rabbitmq-server.service has failed. -- -- The result is failed. Dec 17 09:15:42 vm193-168-1-66 systemd[1]: Unit rabbitmq-server.service entered failed state. Dec 17 09:15:42 vm193-168-1-66 systemd[1]: rabbitmq-server.service failed. Dec 17 09:15:43 vm193-168-1-66 sshd[13480]: Received disconnect from 125.133.100.146: 11: Bye Bye [preauth] Dec 17 09:15:48 vm193-168-1-66 sshd[13949]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=2 Dec 17 09:15:48 vm193-168-1-66 sshd[13949]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root" Dec 17 09:15:50 vm193-168-1-66 sshd[13949]: Failed password for root from 210.212.237.67 port 35528 ssh2 Dec 17 09:15:50 vm193-168-1-66 sshd[13949]: Received disconnect from 210.212.237.67: 11: Bye Bye [preauth] lines 1317-1338/1338 (END)
因为上边的两段日志都没有找到明显的缘由,因而尝试再次启动rabbitmq,同时tail -f开启messages日志:tail -f /var/log/messages,发现有以下日志内容(比较长,可略过这段日志直接看后边):oop
Dec 17 09:26:48 vm193-168-1-66 systemd: rabbitmq-server.service holdoff time over, scheduling restart. Dec 17 09:26:48 vm193-168-1-66 systemd: Cannot add dependency job for unit proc-sys-fs-binfmt_misc.automount, ignoring: Unit is masked. Dec 17 09:26:48 vm193-168-1-66 systemd: Starting RabbitMQ broker... Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: 2019-12-17 09:26:48.706 [error] Unable to parse erlang terms from RABBITMQ_CONFIG_FILE file: /etc/rabbitmq/rabbitmq.config Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: Error: {512,erl_parse, Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: ["syntax error before: ","']'"]} Dec 17 09:26:48 vm193-168-1-66 systemd: rabbitmq-server.service: main process exited, code=exited, status=64/n/a Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: Error: unable to perform an operation on node 'rabbit@vm193-168-1-66'. Please see diagnostics information and suggestions below. Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: Most common reasons for this are: Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues) Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server) Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * Target node is not running Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: In addition to the diagnostics info below: Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * Consult server logs on node rabbit@vm193-168-1-66 Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * If target node is configured to use long node names, don't forget to use --longnames with CLI tools Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: DIAGNOSTICS Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: ======== Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: attempted to contact: ['rabbit@vm193-168-1-66'] Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: rabbit@vm193-168-1-66: Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * connected to epmd (port 4369) on vm193-168-1-66 Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * epmd reports: node 'rabbit' not running at all Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: no other nodes on vm193-168-1-66 Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * suggestion: start the node Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: Current node details: Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * node name: 'rabbitmqcli-14476-rabbit@vm193-168-1-66' Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * effective user's home directory: /var/lib/rabbitmq Dec 17 09:26:49 vm193-168-1-66 rabbitmqctl: * Erlang cookie hash: WQikY88cKw2MYZAMQRGnMA== Dec 17 09:26:49 vm193-168-1-66 systemd: Failed to start RabbitMQ broker. Dec 17 09:26:49 vm193-168-1-66 systemd: Unit rabbitmq-server.service entered failed state. Dec 17 09:26:49 vm193-168-1-66 systemd: rabbitmq-server.service failed.
从上面的/var/log/massages日志找到了日志里下面三行重点提示:ui
Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: 2019-12-17 09:26:48.706 [error] Unable to parse erlang terms from RABBITMQ_CONFIG_FILE file: /etc/rabbitmq/rabbitmq.config Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: Error: {512,erl_parse, Dec 17 09:26:48 vm193-168-1-66 rabbitmq-server: ["syntax error before: ","']'"]}
能够看出,在512行前面存在语法问题。this
另外能够用下面的命令检测配置文件/etc/rabbitmq/rabbitmq.config是否正确
[root@vm193-168-1-66 lib]# erl -noshell -eval 'io:format("~p~n", [file:consult("/etc/rabbitmq/rabbitmq.config")]).' -eval 'init:stop().' {error,{512,erl_parse,["syntax error before: ","']'"]}} #结果也是提示在512行以前有语法错误 [root@vm193-168-1-66 lib]#
由于整个部署过程当中只有/etc/rabbitmq/rabbitmq.config这个配置文件改动了惟一的一行内容:第66行,去掉了{loopback_users, []},这一行前面的配置。
仔细检查文件,发现{loopback_users, []},这一行后边的内容所有注释掉了的,所以其实应该是要去掉{loopback_users, []},末尾的逗号的:
尝试着去掉了行尾的逗号,再次检测配置文件,发现结果是OK了:
[root@vm193-168-1-66 rabbitmq]# erl -noshell -eval 'io:format("~p~n", [file:consult("/etc/rabbitmq/rabbitmq.config")]).' -eval 'init:stop().' {ok,[[{rabbit,[{loopback_users,[]}]}, {kernel,[]}, {rabbitmq_management,[]}, {rabbitmq_shovel,[{shovels,[]}]}, {rabbitmq_stomp,[]}, {rabbitmq_mqtt,[]}, {rabbitmq_amqp1_0,[]}, {rabbitmq_auth_backend_ldap,[]}, {lager,[]}]]} [root@vm193-168-1-66 rabbitmq]#
再次启动rabbitmq,就成功了:
这是一个教训:对于这种注释掉不少内容的配置文件,修改完了以后,最好过滤掉注释了的内容,查看一下剩下的行有没有什么格式、符号的问题!不然,就只有靠爬坑减肥了......