Supervisor

最后更新时间: 2018-06-28 | 作者: AberSheeran | 捐助

最近我一个开发怎么就干上了运维的活,此篇以作记录。


下载之后修改/etc/supervisord.conf其中取消后台Web端口的注释

1
2
3
4
[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=Pass              ; (default is no password (open server))

这样可以在对应的web界面可视化的管理和查看进程。
当然也可以取消[unix_http_server]的注释,这样只能使用Nginx一类的反向代理服务器代理它之后才能直接看,好处是,不用多占一个端口。

然后翻到最下面,查看以下语句是否被注释,如果被注释了,就取消注释

1
2
[include]
files = supervisord.d/*.ini

这个就是把对应目录下的 ini 配置文件读取出来作为配置,便于管理。

编写被管理进程配置

在上述配置文件目录下建立任意的.ini文件,写入配置。

一般来说,以下的配置就足够了(此处以uwsgi作为样例),更多配置请查看官方文档

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[program:uwsgi]                         ;配置的服务名
command=uwsgi --emperor uwsgi.d         ;启动服务的命令
directory=/pdk                          ;执行 command 之前,先切换到工作目录
user=uwsgi                              ;启动服务的用户
stdout_logfile=/pdk/uwsgi.d/emporer.log ;将标准输出导到对应文件中
redirect_stderr=true                    ;将错误输出导到上一行所指的文件中
autostart=true                          ;自动启动
autorestart=true                        ;自动重启
stopasgroup=true                        ;发送终止信号时会照顾它的子进程
killasgroup=true                        ;发送结束信号时会照顾它的子进程

这里有一个坑,redirect_stderr=true如果没有,那么某些程序的日志就没法正常显示。目下看来,至少Python自带的logging模块和uwsgi的日志都会因为没有这个选项而不在我们指定的日志文件中出现。因为他们的日志都是输出到stderr里的。