supervisor

在supervisor中配置的进程无法正常启动

supervisorctl status
可以看到运行状态,

cerebro                          FATAL     Exited too quickly (process log may have details)

    1

这里的信息太少,我们需要到具体的日志中查看到底出了什么问题。

tail -20 /var/log/supervisord.log

2017-08-07 13:23:36,829 INFO spawned: 'cerebro' with pid 16482
2017-08-07 13:23:36,863 INFO exited: cerebro (exit status 1; not expected)
2017-08-07 13:23:36,863 INFO gave up: cerebro entered FATAL state, too many start retries too quickly

    1
    2
    3

这里的信息虽然多了些,但是并没有实质性的内容。

到底启动的时候发生了什么呢

supervisorctl tail programname stdout
该命令是动态的输出启动进程时的输出

/usr/bin/env: bash: Not a directory

    1

发现环境变量没有正确配置。

我其实已经在/etc/profile中配置了java的环境变量,但是没有效果。

因为supervisor启动时并不会加载/etc/profile 文件。(设计本身)

但是supervisor 提供了一个配置参数enviroment

[program:cerebro]
environment = JAVA_HOME="/opt/jdk/"
command =/bin/bash /opt/cerebro/bin/cerebro
autostart =true
autorestart =  true

    1
    2
    3
    4
    5
    6

使用

supervisorctl update
supervisorctl reload
supervisorctl status

    1
    2
    3

进程正常工作

cerebro                          RUNNING   pid 17236, uptime 0:00:08
elasticsearch                    RUNNING   pid 17235, uptime 0:00:08
 

 

注意:以下代码,命令和配置在ubuntu14.04LTS上实际测试,其他发行版或ubuntu其他版本仅供参考

  • 安装 
    安装可以使用一下命令:
sudo apt-get install supervisor

安装成功后,supervisor就会默认启动

  • 使用 
    有很多方法添加进程,看了很多博客上的介绍和加上我的实际使用,我认为一下方法最好用: 
    将每个进程的配置文件单独拆分,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如test.conf定义的一个简单的HTTP服务器:
[program:test]
command=python -m SimpleHTTPServer

 

重启supervisor,让配置文件生效,然后启动test进程:

supervisorctl reload
supervisorctl start test

如果要停止进程,就用stop 
其他一些配置,通过这个例子讲解

[program:meta.txn.recover.on.error]
command=/cas/bin/meta.txn.recover.on.error ; 被监控的进程路径
numprocs=1                    ; 启动几个进程
directory=/cas/bin                ; 执行前要不要先cd到目录去,一般不用
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启。。当然要选上了
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
stdout_logfile=logfile        ; 指定日志文件

 

常用命令: 
supervisorctl start programxxx,启动某个进程

supervisorctl restart programxxx,重启某个进程

supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)

supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。

supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。

supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log

注意:显式用stop停止掉的进程,用reload或者update都不会自动重启

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值