![55fee9d57a63a7ba36cc9d1d570258ce.png](https://i-blog.csdnimg.cn/blog_migrate/7062a1018f9376d2ec1a98175e722107.jpeg)
最近在项目部署中,经常使用Supervisor来管理进程。这里简单介绍下如何用Supervisor来管理进程。
什么是Supervisor?
Supervisor 是Python编写的 Client/Server 模式的系统,通过supervisor,可以对类Unix操作系统的进程进行监控和管理。简单来说,当你的项目部署到服务器后,可以通过 Supervisor 便捷的管理项目程序的启动和停止。
安装
pip install supervisor
如果是ubuntu系统,可以用 api-get
配置
- 运行
echo_supervisord_conf > /etc/supervisord.conf
生成配置文件supervisord.conf.
如果遇到报错 permission denied: /etc/supervisord.conf,那么就是权限不够,你可以执行这个命令: sudo su - root -c "echo_supervisord_conf > /etc/supervisord.conf"
- 对 supervisord.conf 文件进行配置,主要是:
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; the path to the socket file
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
[include]
files = /etc/supervisord.d/*.ini ; 引入 `/etc/supervisord.d/` 下的 `.ini` 文件
- 创建文件夹
/etc/supervisord.d
- 在文件夹
/etc/supervisord.d/
下创建对应项目的配置文件,例如:demo.ini
,简单示例如下:
[program:demo]
command=/root/demo/bin/demo -srcPath=/root/demo -runMode=production
directory=/root/demo
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
startsecs=1 ; number of secs prog must stay running (def. 1)
startretries=3 ; max # of serial start failures (default 3)
user=root ; setuid to this UNIX account to run the program
redirect_stderr=true ; redirect proc stderr to stdout (default false)
stdout_logfile=/root/demo/logs/demo.stdout.log
stdout_logfile_maxbytes=50MB ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=10 ; # of stdout logfile backups (default 10)
stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stdout_events_enabled=false ; emit events on stdout writes (default false)
stderr_logfile=/root/demo/logs/demo.stderr.log
stderr_logfile_maxbytes=10MB ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
stderr_events_enabled=false ; emit events on stderr writes (default false)
- 运行
supervisord -c /etc/supervisord.conf
启动 - 运行
ps aux | grep supervisord
查看 supervisord 是否正在运行
使用Supervisorctl
Supervisorctl 是 supervisord 的一个命令行客户端工具
- 运行以下命令指定其读取配置文件:
supervisorctl -c /etc/supervisord.conf
- 运行
supervisorctl
进入客户端 - 运行
reread
读取项目ini
文件 - 运行
add xxx
命令后,被添加的项目将会一直显示在supervisorctl 中,便于管理
常用命令
supervisord
: 初始启动Supervisord,启动、管理配置中设置的进程;supervisorctl stop(start, restart) xxx
,停止(启动,重启)某一个进程(xxx);supervisorctl reread
: 只载入最新的配置文件, 并不重启任何进程;supervisorctl reload
: 载入最新的配置文件,停止原来的所有进程并按新的配置启动管理所有进程;supervisorctl update
: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启;