请教下 supervisor 配置的问题

2017-04-15 00:45:39 +08:00
 MrMike

为了监控 elasticsearch 死掉后,能自动重启,网上查了下,supervisor 可以实现这个要求,以下是配置: [program=sticsearch] command=/usr/share/elasticsearch/bin/elasticsearch autostart=true autorestart=true stdout_logfile=/home/demoer/log/elasticsearch/elasticsearch-stdout.log stderr_logfile=/home/demoer/log/elasticsearch/elasticsearch-stderr.log startsecs=5

我把这个直接写在 supervisor.conf ,在启动 supervisorctl reload, reread, update,都说没有找到配置( No config updates to processes )。 我用 include_file 单独来引入,也是同样的结果。 请问下配置代码是否正确呢?

4311 次点击
所在节点    Python
29 条回复
RIcter
2017-04-15 01:23:11 +08:00
得重启 supervisor 服务…
MrMike
2017-04-15 08:11:24 +08:00
supervisord -c /etc/supervisord.conf

[root tmp]# ps aux | grep supervisord
root 10926 0.0 0.3 220120 11836 ? Ss Apr14 0:11 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 12554 0.0 0.2 217092 10664 ? Ss Apr14 0:10 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 12564 0.0 0.2 217128 10716 ? Ss Apr14 0:10 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 12575 0.0 0.2 217280 10824 ? Ss Apr14 0:11 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 12764 0.0 0.2 219728 11464 ? Ss Apr14 0:11 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 13844 0.0 0.2 217588 11164 ? Ss 00:11 0:05 /usr/bin/python /usr/bin/supervisord
root 14070 0.0 0.2 216964 9828 ? Ss 01:00 0:04 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 14117 0.0 0.2 217144 10644 ? Ss 01:02 0:04 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 14128 0.0 0.2 217520 11144 ? Ss 01:04 0:04 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 14936 0.0 0.2 216960 9832 ? Ss 08:07 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 14938 0.0 0.0 112648 960 pts/0 S+ 08:07 0:00 grep --color=auto supervisord

[root tmp]# supervisorctl
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> reread
No config updates to processes
supervisor> update
supervisor> status
supervisor>

已经重启过很多次,还是一样的结果。

下面是 supervisor.conf 和 elasticsearch.conf 的配置内容。

supervisor.conf:

[include]
files = /etc/supervisord/conf.d/elasticsearch.conf

elasticsearch.conf:

[program=sticsearch]
command=systemctl restart elasticsearch.service
;command=/usr/share/elasticsearch/bin/elasticsearch
;directory=/usr/share/elasticsearch
autostart=true
autorestart=true
startsecs=10
startretries=3
redirect_stderr=true
user=root
stdout_logfile=/home/public/log/elasticsearch/elasticsearch-stdout.log
stderr_logfile=/home/public/log/elasticsearch/elasticsearch-stderr.log
zzlyzq
2017-04-15 08:25:14 +08:00
主配置里面默认会包含所有 conf.d 下面的 conf 后缀文件 回头我看看我的配置
MrMike
2017-04-15 08:29:46 +08:00
@zzlyzq 我安装完 supervisor 后,在 etc 下面没有 /etc/supervisord 文件夹的,我是自己创建的 /etc/supervisord/con.d/文件夹,然后把 elasticsearch.conf 放在里面。
zzlyzq
2017-04-15 09:00:18 +08:00
恩 看起来没啥错,我的 centos6.8 安装后,主文件是 包括如下两行

[include]
files = /etc/supervisor.d/*.conf

你的配置看起来也没啥问题的,要不试试
ls /etc/supervisord/conf.d/elasticsearch.conf
看看这个文件是不是真正的存在呢? 不存在的概率可能比较小,不过工作中经常会遇到这种情况,呵呵。
MrMike
2017-04-15 09:15:19 +08:00
@zzlyzq 文件是存在的。郁闷。。一直找不到原因。
zzlyzq
2017-04-15 09:24:03 +08:00
@MrMike 既然文件已经加载了,怀疑还是配置的问题,
1. 是不是配置的 program 名字有冲突?
2. 打开界面,可能更一目了然

在 supervisord.conf 开头加上或者修改如下,打开 http ,一目了然

[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:1009 ; (ip_address:port specifier, *:port for all iface)
username=ops ; (default is no username (open server))
password=123123 ; (default is no password (open server))
zzlyzq
2017-04-15 09:27:39 +08:00
@MrMike 我大概知道了, supervisor 在执行命令的时候要求比较苛刻,比如全路径呀,环境变量报错呀啥的, 刚刚的 http 页面可以让你看到
1. elasticsearch 进程是否配置到 supervisord
2. 启动情况如何,是 ok 还是 fail
3. 瞅瞅 log 里面有啥吧
MrMike
2017-04-15 09:29:16 +08:00
@zzlyzq supervisord.conf 用的是默认设置,我没修过过。

[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
chmod=0777 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))

;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))

supervisord.log

2017-04-15 08:08:21,706 INFO RPC interface 'supervisor' initialized
2017-04-15 08:08:21,706 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-04-15 08:08:21,707 INFO supervisord started with pid 14936
2017-04-15 08:43:04,969 CRIT Supervisor running as root (no user in config file)
2017-04-15 08:43:04,969 INFO Included extra file "/etc/supervisord/conf.d/elasticsearch.conf" during parsing
2017-04-15 08:43:04,980 INFO RPC interface 'supervisor' initialized
2017-04-15 08:43:04,980 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-04-15 08:43:04,981 INFO daemonizing the supervisord process
2017-04-15 08:43:04,981 INFO supervisord started with pid 15044

貌似没看出有啥问题呢。也没有报错。
zzlyzq
2017-04-15 09:42:31 +08:00
Included extra file "/etc/supervisord/conf.d/elasticsearch.conf" during parsing

上面的一行说明你的 elasticsearch.conf 已经被加载了,现在我越来越猜测是 elasticsearch.conf 配置问题导致没有启动

既然没有打开 http ,那就使用如下命令看看 status 吧

supervisorctl status
zsz
2017-04-15 10:06:43 +08:00
1.supervisor 配置中的 command 一定要处于挂起运行,把标准输出,是他的子进程,运行期间不能返回
2.你需要用命令行启动 es 的方式,配置到 command
3.既然用 systemd 和 supervisor 用一个就可以,他们都是守护


有问题可以加群问,效率高些,面向初学者的 python Linux 学习群, 由一群有经验的工程师组成, python qq 群号: 278529278 , PHP qq 群号: 476648701 ,非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex
yzongyue
2017-04-15 10:16:29 +08:00
这样写试试 [program:sticsearch]
ksupertu
2017-04-15 14:52:24 +08:00
新版本先要启动 supervisord 然后在启动 supervisorctl ,不然会一直报错……
ksupertu
2017-04-15 14:54:34 +08:00
而且你 command 那里最好写成 shell 脚本去执行,错误概率小一点
MrMike
2017-04-15 18:15:47 +08:00
@ksupertu 已经启动过了。 command 我用 /usr/share/elasticsearch/bin/elasticsearch 也是不能用的。在日志里面也看不到错误提示呢。
zsz
2017-04-15 19:11:22 +08:00
@MrMike ,你看的什么错误日志,是 supervisor 的?还是 supervisor 配置文件中 es 的?这个启动不了应该是环境问题,一般是 java 环境, supervisor 自己的错误日志中应该有信息才对
MrMike
2017-04-15 21:16:48 +08:00
@zsz 是 supervisord.log
a128445
2017-04-15 21:48:13 +08:00
[program=sticsearch]

改为
[program:sticsearch]
zsz
2017-04-15 21:48:56 +08:00
@MrMike 这两个 log 呢? 有错误信息

stdout_logfile=/home/public/log/elasticsearch/elasticsearch-stdout.log
stderr_logfile=/home/public/log/elasticsearch/elasticsearch-stderr.log
zsz
2017-04-15 21:51:56 +08:00
先按照上面说的把配置写对 [program:sticsearch]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX