AberSheeran
Aber Sheeran
I know nothing except the fact of my ignorance.

Supervisor

起笔自
所属文集: Python-Package
共计 1588 个字符
落笔于

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

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

[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一类的反向代理服务器代理它之后才能直接看,好处是,不用多占一个端口。

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

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

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

编写被管理进程配置

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

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

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

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

  • Python的Print无法显示到日志
    这可能是因为缓冲区的问题,只需要运行时加-u参数即可,例如: python -u run.py

运行

使用supervisord -c /etc/supervisord.conf启动后台进程。

一些管理命令如下

$ supervisorctl status
$ supervisorctl stop uwsgi
$ supervisorctl start uwsgi
$ supervisorctl restart uwsgi
$ supervisorctl reread
$ supervisorctl update
如果你觉得本文值得,不妨赏杯茶
Pyinstaller打包代码
输出彩色命令行