蒋振飞的博客 - 进程管理Supervisor   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

进程管理Supervisor

发布时间: 2018年09月01日 发布人: 蒋振飞 热度: 845 ℃ 评论数: 0

    之前有好几次网站出现了500的内部错误,然后每次我都要去登一下服务器,重启一下uwsgi服务,才能正常访问。我想可能是服务器挂不住了吧,因为我的服务器配置并不高,才会出现这种异常的现象,但是每次都要手动重启还是挺麻烦的,而且我也不能时刻关注服务器异常,所以就学习了一下Supervisor的配置,我的网站架构是Django+uwsgi+Nginx。

    Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

1.Supervisor的安装

sudo apt-get install supervisor

2.配置文件

    通过apt-get install安装后,supervisor的配置文件在:

/etc/supervisor/supervisord.conf

    supervisor的配置文件默认是不全的,不过在大部分默认的情况下,上面说的基本功能已经满足。而其管理的子进程配置文件在

/etc/supervisor/conf.d/*.conf

    然后,开始给自己需要的脚本程序编写一个子进程配置文件,让supervisor来管理它,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisor/conf.d/uwsgi.conf):

[program:uwsgi]  # program:不能省,类似于声明这是你定义的自启动程序

command=/home/xxx/sites/jzfblog.com/env/bin/uwsgi --ini /home/xxx/sites/jzfblog.com/site_uwsgi/uwsgi.ini  # --ini 后跟ini配置文件的目录,而且注意我用的虚拟环境

stopsignal=QUIT   

autostart=true       # 设置该程序在supervisor启动后自动启动

autorestart=true      # 当该程序停止后,无条件重新启动。有三个选项分别为true false 和 unexcepted.   

stdout_logfile=/home/xxx/sites/jzfblog.com/site_uwsgi/supervisor.log     # 日志保存路径

stderr_logfile=/home/xxx/sites/jzfblog.com/site_uwsgi/supervisor_err.log  # 日志保存路径

3.载入添加的自启动程序

    首先切换到root权限(非root会报错error <class 'socket.error'>, [Errno 13] Permission denied: file: /use/lib/python2.7/socket.py line: 228)。

    接着输入

supervisorctl reload

    会提示Restart supervisord,最后,检验是否成功自启动了程序,输入 ps -ef|grep uwsgi 查看uwsgi是否执行。

4.Supervisor常用命令    

    ①更新新的配置到supervisord    

supervisorctl update

    ②重新启动配置中的所有程序

supervisorctl reload

    ③启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name

    ④查看正在守候的进程

supervisorctl

    ⑤停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name

    ⑥重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name

    ⑦停止全部进程

supervisorctl stop all

    注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表