进程管理(Supervisor)
-
进程管理工具
- 启动/停止/自动重启程序, 而且还可以对多个程序分组管理(主要设置自动化任务,解放人的重复操作,比如启动服务器等)
-
安装
- 在python3兼容性不好, 需要使用python2进行安装
sudo pip install supervisor
-
配置
-
运行echo_supervisord_conf命令输出默认的配置项,可以如下操作将默认配置保存到文件中
echo_supervisord_conf > supervisord.conf
vim 打开编辑supervisord.conf文件,修改
[include]
files = relative/directory/*.ini
为
[include]
files = /etc/supervisor/*.conf
include选项指明包含的其他配置文件。
将编辑后的supervisord.conf文件复制到/etc/目录下
sudo cp supervisord.conf /etc/
然后我们在/etc目录下新建子目录supervisor(与配置文件里的选项相同),并在/etc/supervisor/中新建tuotiao管理的配置文件toutiao.conf(这里是自定义的配置文件)。
[group:toutiao]
programs=toutiao-app
programs=im
[program:toutiao-app]
command=/home/python/scripts/toutiao_app.sh # 通过哪个脚本来启动指定的应用
directory=/home/python/toutiao-backend # 程序的目录
user=python # 启动的用户
autorestart=true # 是否自动重启
redirect_stderr=false # 出错后是否写入Supervisor专门的日志
loglevel=info # Supervisor的日志级别
stopsignal=KILL # stop操作使用的命令
stopasgroup=true # 停止进程时, 是否一起停止其子进程
killasgroup=true
[program:im]
command=/home/python/scripts/im.sh
directory=/home/python/toutiao-backend
user=python
autorestart=true
redirect_stderr=false
loglevel=info
stopsignal=KILL
stopasgroup=true
killasgroup=true
# 注:真实配置要把这些注释去除, 否则会报错
启动
supervisord -c /etc/supervisord.conf
查看 supervisord 是否在运行:
ps aux | grep supervisord
supervisorctl
我们可以利用supervisorctl来管理supervisor。
supervisorctl
> status # 查看程序状态
> start apscheduler # 启动 apscheduler 单一程序
> stop toutiao:* # 关闭 toutiao组 程序
> start toutiao:* # 启动 toutiao组 程序
> restart toutiao:* # 重启 toutiao组 程序
> update # 重启配置文件修改过的程序
执行status命令时,显示如下信息说明程序运行正常
supervisor> status
toutiao:toutiao-app RUNNING pid 32091, uptime 00:00:02