最近我一个开发怎么就干上了运维的活,此篇以作记录。
下载之后修改/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=/website
user=uwsgi
stdout_logfile=/website/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