引言:
在 web 应用部署到线上后,需要保证应用一直处于运行状态
,在遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启
,继续提供服务。所以,就需要一个工具,时刻监控 web 应用的运行情况,管理该进程。Supervisor
就是解决这种需求的工具,可以保证程序崩溃后,重新把程序启动起来等功能。
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不仅仅是 Python 进程)。同样,它也不仅仅是监控web,还能对python的一切脚本起着重启的作用
。
安装Supervisor
sudo apt install supervisor
配置文件
另外可以查看是否安装成功,查看进程号:
pgrep supervisord
若出现随机进程号则表示已经启动并安装成功
。我们先补充生成的默认文件:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
安装好之后,不出问题的话supervisor服务已经启动完成。
配置文件在/etc/supervisor/conf.d/
路径下,
举例再conf.d下创建对应的项目
的配置文件
我这里配置了app.conf和djangotest.conf
app.conf文件,其中app.py
文件就放在目录/home/szr/temp/
下面
[program:pmapp]
command=python3 /home/szr/temp/app.py
autorestart=true ;默认自动启动
stdout_logfile=/home/szr/temp/supervisord_stdout.log ;指定日志文件路径
stderr_logfile=/home/szr/temp/supervisord_stderr.log ;指定日志文件路径
[supervisord]
djangotest.conf文件,其中manage.py
文件就放在目录/home/szr/lzztes/
下面
[program:djangotest]
command=/usr/bin/python3.8 /home/szr/lzztes/manage.py runserver 0.0.0.0:8000
autostart=true
stderr_logfile=/home/szr/lzztes/logs/err.log
stdout_logfile=/home/szr/lzztes/logs/out.log
startretries=2
stopasgroup=true
killasgroup=true
environment=PYTHONPATH="/home/szr/.local/lib/python3.8/site-packages:/usr/lib/python3/dist-packages";配置同一个环境变量下有多个值
#项目路径 directory to cwd to before exec supervisor在执行前会切换到当前目录下 根据自己的情况配置
# directory=/
[supervisord]
其中可能需要先在指定目录下/home/szr/lzztes/logs/
创建一个out.log
否则可能会报错找不到。
使用
第一次启用
sudo supervisord -c /etc/supervisor/conf.d/app.conf
或者使用
sudo supervisord -n -c /etc/supervisor/conf.d/app.conf
可以看见在前台看见运行信息,seccess
或者必须进入到目录:/etc/supervisor/
下
sudo supervisorctl
status 查看状态
update 只更新变化添加的配置
reload 更新所有项目的配置 并重启所有项目
start+项目名称 启动项目
restart+项目名称 重新启动项目
stop+项目名称 停止项目
stop all 停止所有项目名称
以下是例子
当kill进程的时候 supervisor会守护这些进程,并且重启
以app.py为例子,
sudo kill -15 16221
之后supervisor进程守护,又重启了app.py在端口号 16237