美文网首页
Supervisor 使用

Supervisor 使用

作者: yangjingqzp | 来源:发表于2017-12-09 16:35 被阅读0次

在开发一个软件的时候,通常会用到守护进程来做一些任务。比如耗时的邮件发送、计算各种榜单的排名、MQ 队列的消费。通常,我们可以 nohup 运行脚本,并通过 crontab 来监测脚本运行情况。但 Supervisor 的出现使这一切变得更加的简单。它可以带来更多的好处:

  1. 通过简单配置,即可创建守护进程。
  2. 对进程分组的控制。比如需要 10 个相同的进程处理邮件发送。
  3. 简单、易用的命令。

安装

通过系统的包进行安装:
sudo apt-get install supervisor

Supervisor 是 CS 架构。安装完成后,通过 ps -ef ,你将看到已经运行的 supervisord 服务:
/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

在 UNIX 系统上,我们可以通过客户端(supervisorctl)发送命令让服务端创建、开启、停止进程。
/etc/supervisor/supervisord.conf 为 supervisor 的默认配置文件。
[supervisord]
; 服务的日志文件路径,记录服务的运行日志
logfile=/var/log/supervisor/supervisord.log
; supervisord 存放 pid 的文件
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[include]
; 导入进程的配置文件
files = /etc/supervisor/conf.d/*.conf

进程的配置文件可以放在上面的配置中,但是建议单独存放,如上配置则放在 /etc/supervisor/conf.d/ 目录下,以 .conf 作为扩展名,例如,foo.conf 定义了一个 foo 的进程:

; 定义的进程命令名称
[program:foo]
; 进程具体需要执行的命令,这里建议为绝对路径
command=/bin/foo
; 默认启动的进程数
numprocs=1
; 命令启动后,进程的名称。
; 如果要启动多个进程,这里要改为 %(program_name)s_%(process_num)02d
process_name=%(program_name)s
; 进程异常错误时的日志地址
redirect_stderr=/tmp/supervisor/foo.log

使用

添加你所需要的命令后,重新导入配置文件,并开启进程。
supervisorctl reload
supervisorctl restart all

通过 supervisorctl 命令对进程进行管理。

命令 说明
supervisorctl start foo 启动进程 foo
supervisorctl start all 启动所有定义的进程
supervisorctl start foo:* 启动 foo 进程组。foo 的进程数量大于1
supervisorctl stop foo 停止进程 foo
supervisorctl status 查看定义进程状态

注意事项

  1. supervisor 不能优雅的重启进程(关闭时,不会等待当前任务处理完成),关闭时可能你的任务只执行完一部分。
  2. 定义进程被 kill 后,supervisor 会自动重新创建。但进程运行异常,则进程的 status 提示:
    Exited too quickly (process log may have details)
  3. 服务器重启时建议自动开启 supervisor 服务。通过在 /etc/rc.local 文件中添加 supervisord 启动的配置。
    /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

参考文献

supervisor 官方网站
Linux后台进程管理利器:supervisor

相关文章

网友评论

      本文标题:Supervisor 使用

      本文链接:https://www.haomeiwen.com/subject/ctgpbxtx.html