supervisor进程管理
以supervisor管理celery进程为例
一 安装supervisor
二 配置
三 启动和关闭
四 打开web监听
安装supervisor
python3 无法直接使用pypi源安装, 使用
pip3 install git+https://github.com/Supervisor/supervisor
配置
- 生成默认的配置文件
echo_supervisord_conf > /etc/supervisord.conf
- 添加自定义配置
在生成的conf文件最后添加
[program:tiis_is_name]
command=/home/wukt/.virtualenvs/p3.6/bin/celery worker -l INFO -c 1 -A flaskrun.celery --beat --loglevel debug --logfile celery_beat.log
stdout_logfile=celeryd.log
stderr_logfile=celeryd.log
autostart=true
autorestart=true
startsecs=1
stopwaitsecs=600
启动和关闭
启动
supervisord -c supervisord.conf
关闭supervisord需要通过supervisor的控制器:
supervisorctl -c supervisord.conf shutdown
重启supervisord也是通过supervisor的控制器:
supervisorctl -c supervisord.conf reload
打开web监听
在生成的conf文件删除指定的注释即可:
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
# ...
一些配置文件的含义, 来源 https://www.jianshu.com/p/805977544d7f:
[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 1 ; 启动 1 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 10 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
;这一配置项的作用是:如果supervisord管理的进程px又产生了若干子进程,使用supervisorctl停止px进程,停止信号会传播给px产生的所有子进程,确保子进程也一起停止。这一配置项对希望停止所有进程的需求是非常有用的。
stopasgroup=true
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改PYTHONPATH ;process environment additions
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
主要参考:
-
supervisor 进程管理: https://www.jianshu.com/p/805977544d7f
-
服务器使用Supervisor后台运行Celery: http://yshblog.com/blog/165