wget https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz
tar xzvf supervisor-3.3.4.tar.gz
cd supervisor-3.3.4
python setup.py install
cd supervisor-3.3.4
echo_supervisord_conf > supervisord.conf
supervisord.conf 就是配置文件,把它复杂到你的项目的目录下如 /home/work/web/supervisord.conf
添加以下代码至此文件的最后:(请按需更改)
[program:myprogram]
process_name=MYPROGRAM%(process_num)s
directory=/var/www/apps/myapp
command=/var/www/apps/myapp/virtualenv/bin/python index.py --port=%(process_num)s
startsecs=2
user=youruser
stdout_logfile=/var/log/myapp/out-%(process_num)s.log
stderr_logfile=/var/log/myapp/err-%(process_num)s.log
numprocs=4
numprocs_start=14000
user=work
这里需要注意的是,需要加入user定义,否则会报“Error: Invalid username your user supervisord” 错误。
这里使用了四个实例(numprocs)。
upstream myappbackend {
server 127.0.0.1:14001 ;
server 127.0.0.1:14002 ;
server 127.0.0.1:14003 ;
server 127.0.0.1:14004 ;
}
server {
listen 4.5.6.7:80;
server_name example.com;
access_log /var/log/nginx/myapp.log main;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_pass http://myappbackend/;
}
}
在 /home/work/web/目录下,执行
supervisord -c supervisord.conf
supervisorctl restart all
supervisorctl start myprogram
在本应用中,supervisor 可以统一对多个同构的Python进程进行管理。当有请求过来时,Nginx先进行负载均衡,然后把动态请求发送给Python进程,这些Python则是由supervisor统一进行管理。
Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:
supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。