共计 1594 个字符,预计需要花费 4 分钟才能阅读完成。
supervisor 是用 Python 开发的一个 client/server 服务,是 Linux/Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死,supervisort 监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写 shell 脚本来控制。
说白了,它真正有用的功能是俩个将非 daemon(守护进程) 程序变成 deamon 方式运行对程序进行监控,当程序退出时,可以自动拉起程序。
但是它无法控制本身就是 daemon 的服务。
1, 安装 Supervisor
yum install epel-release | |
yum install -y supervisor |
2, 生成配置文件
supervisord -c /etc/supervisord.conf
然后修改配置文件 vim /etc/supervisord.conf
将 web 服务打开,需要注意 ip 地址要写 *,否则外网访问不了,而 username 和 password 就是登录服务页面的用户名和密码,可以改的复杂一点,另外阿里云也需要向外网暴露一下 9001 端口
[inet_http_server] ; inet (TCP) server disabled by default | |
port=*:9001 ; (ip_address:port specifier, *:port for all iface) | |
username=user ; (default is no username (open server)) | |
password=123 ; (default is no password (open server)) |
然后添加 uwsgi 服务的配置
[program:mypro] | |
command =uwsgi /usr/local/bin/uwsgi --ini /root/js_back/js_back_uwsgi.ini ; 启动命令, 可以看出与手动在命令行启动的命令是一样的 | |
autostart = false ; 在 supervisord 启动的时候也自动启动 | |
stopsignal=QUIT | |
user=root | |
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 | |
startretries = 3 ; 启动失败自动重试次数,默认是 3 | |
autorestart = true ; 程序异常退出后自动重启 | |
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false | |
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB | |
stdout_logfile = /root/js_back_uwsgi.log | |
stderr_logfile = /root/js_back_err.log |
最后我们知道,Supervisord 只能控制非守护进程,而 uwsgi 本身就具备守护进程的配置,所以需要修改项目的 uwsgi 配置,将守护进程配置注掉 vim js_back_uwsgi.ini
[uwsgi] | |
chdir = /root/js_back | |
module = js_back.wsgi | |
master = true | |
processes = 3 | |
socket = 0.0.0.0:8001 | |
vacuum = true | |
pythonpath = /usr/bin/python3 | |
pidfile = /root/js_back/js_back.pid | |
# 注释掉 daemonize 模式,因为 Supervisor 无法控制守护进程服务 | |
#daemonize = /root/js_back/uwsgi.log |
启动服务
supervisord -c /etc/supervisord.conf 如果想杀死服务可以输入命令
killall -s INT /usr/bin/python | |
最后访问服务管理界面 http://ip:9001,就可以管理你服务器上的服务 |
:
正文完
星哥玩云-微信公众号
