supervisor之启动rabbitmq报错原因
前言
今天重启了服务器,发现supervisor管理的rabbitmq的进程居然启动失败了,查看日志发现老是报错,记录一下解决的办法。
报错:erlexec:HOME must be set
- 找了网上的许多人的博客,一般的说法是在进程的启动的脚本中加入:
export HOME=/usr/local/erlang
export PATH=$PATH:$HOME/bin
- 系统默认的HONE是/root,可能造成erlang语言环境获取不到HOME参数;上述修改可以用在chkconfig管理和service管理的进程中,但是对于supervisor管理的进程,由于进程的启动命名在supervisor.conf中,不能直接修改HOME参数。
办法: 在supervisor的启动脚本中加入上述语句。
vi Ssupervisor.conf
#!/bin/sh
# chkconfig: 2345 70 90
export HOME=/usr/local/erlang
export PATH=$PATH:$HOME/bin
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
- 这样做可以保证只是临时改变了HOME,但是对系统的HOME没有影响。
溯源
- 为什么会有这个错误?
这个错误不是rabbitmq的原因,而是erlang语言环境的原因;查看一个erl进程:
ps aux | grep beam
# 结果:
root 1779 0.4 0.5 3863876 86060 ? Sl 19:21 0:06 /usr/local/erlang/bin/x86_64-unknown-linux-gnu/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true -B i -- -root /usr/local/erlang -progname erl -- -home /root
- 可以看到-home参数就是启动是加进去的,启动一个erl实例,其调用了erlexec的c文件;
# erlexec.c 文件的路径为/usr/local/erlang/erts/etc/common/erlexec.c
# 部分代码
static char * home;
static char ** Eargsp = NULL;
static int EargsCnt = 0;
static char **argsp = NULL;
static void get_home( void )
{
home = get_env("HOME");
if (home == NULL)
error("HOME must be set");
}
可以看到get_env函数获取HOME环境变量,如果获取失败就输出‘HOME must be set’。
目前一个不明白的地方是HOME参数有一个默认的值/root,为什么get_env函数获取不到,而是返回了null;有待继续研究;
rabbitmq重启失败
发现手动杀死rabbitmq的进程后,supervisor重启rabbitmq要么失败,要么不重启;
如果采取supervisor后台的进程管理来启动和停止rabbitmq是可以的,但是如果手动杀死rabbitmq进程则无法重启进程;
原因:
rabbitmq使用rabbitmq-server start 或使用rabbitmq-server启动后,会有两个进程,一个是erlang的节点服务程序;一个是rabbitmq的应用程序;rabbitmq的应用程序在erlang的节点上运行;
如果强制杀死rabbitmq的应用程序进程,supervisor会尝试启动,这时会尝试启动erlang的节点服务程序和rabbitmq的应用程序,发现已经存在一个erlang的节点服务程序,所以启动会失败;
如果强制杀死erlang的节点服务程序,这时erlang的节点服务程序和rabbitmq的应用程序都会被停止,如果配置参数为autorestart=unexpected 的话,那么supervisor不会去重启该进程,如果参数设置为autorestart=true,那么supervisor会去重启erlang的节点服务程序和rabbitmq的应用程序;
结论:
由supervisor管理rabbitmq进程并不是很合适,因为在rabbitmq的应用程序崩溃而erlang的节点服务程序正常的情况下,重启是失败的;
如果只有节点在运行,但是没有rabbitmq的应用程序实例,那么对于rabbitmq的管理后台也是无法登陆的。
supervisor之启动rabbitmq报错原因的更多相关文章
- centos 下启动 rabbitmq 报错的解决
安装 rabbitmq 后进行了一些配置,然后启动服务: service rabbitmq-server start 无法启动.通过 journalctl -xe 查看日志后,有如下日志: ... - ...
- eclipse里启动rabbitmq报错 java.net.SocketException: Connection reset
RabbitMQ学习之Java客户端连接测试(二) https://blog.csdn.net/roc1029/article/details/51249412 使用guest用户远程连接Rabbit ...
- Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up
报错截图 在Linux下直接运行jenkins.war报错,导致启动失败 报错原因 运行端口已被其他进程占用 解决方法 换个启动端口就可以啦!
- Springboot 启动文件报错,原因是@ComponentScan写成了@ComponentScans
Springboot 启动文件报错,原因是@ComponentScan写成了@ComponentScans
- 移动tomcat ,eclipse启动报错原因
报错:错误路径Eclipse下启动tomcat报错:/bin/bootstrap.jar which is referenced by the classpath, does not exist. 1 ...
- maven 项目启动tomcat报错 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
maven项目启动tomcat报错: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLi ...
- 【转】Eclipse下启动tomcat报错:/bin/bootstrap.jar which is referenced by the classpath, does not exist.
转载地址:http://blog.csdn.net/jnqqls/article/details/8946964 1.错误: 在Eclipse下启动tomcat的时候,报错为:Eclipse下启动to ...
- 学习中的错误——ubuntu 14.04 LTS 启动eclipse报错
在ubuntu中启动eclipse报错:(Eclipse:15978): GLib-GIO-CRITICAL **: g_dbus_connection_get_unique_name: assert ...
- VirtualBox启动虚拟机报错0x80004005
Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 ( ...
随机推荐
- JavaScript 保留两位小数
以下我们将为大家介绍 JavaScript 保留两位小数的实现方法: 四舍五入 以下处理结果会四舍五入: var num =2.446242342; num = num.toFixed(2); // ...
- 【.Net】HttpClient 的使用
class Program { public static HttpClient Client; static HttpResponseMessage response; static void Ma ...
- 题解 P1308 【统计单词数】
小金羊发一篇不一样的题解: 这个题解不是讲解法的,是讲算法的... 众所周知,string在中被定义为是类型, 这意味着我们可以将它作为int一样的类型使用. 并且还有神奇的加减法: string s ...
- 电子商务(电销)平台中财务模块(Finance)数据库设计明细
以下是自己在电子商务系统设计中的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 资金账户表 (finance_account)|-- 自动编号|-- 用户编号|-- 预付款 (ad ...
- 【learning】洲阁筛
问题描述 快速求素数处点值比较好求的积性函数前缀和 大致过程 Step1.求出一定范围内的素数处点值之和(\(g\)) Step2.利用上面的\(g\)求出一个\(f\)然后用\(f\)求出前缀和 具 ...
- 【极值问题】【CF33C】 Wonderful Randomized Sum
传送门 Description 给你一个数列\(A\),你可以选择任意一个前缀和任意一个后缀,前缀后缀可重合.给他们乘\(-1\).求最大能获得的序列和. Input 第一行是一个数\(n\)代表数列 ...
- 没有为扩展名“.cshtml”注册的生成提供程序。
新建的mvc4 空项目,然后从其他项目里拷贝shared文件夹和_ViewStart.cshtml文件过去,然后在@符号上出现 没有为扩展名“.cshtml”注册的生成提供程序.错误 解决方法: 需要 ...
- python创建多维列表
By francis_hao Mar 24,2018 "*"操作符可以用于列表,表示将列表内容重复n次.如下, 但是当列表内容是列表的时候就出问题了,如果我只是修改多 ...
- 洛谷P1199 三国游戏
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...
- mac 的全文搜索
grep -Rni "view.proptypes.style" * 需要切换到要搜索的目录在运行