Supervisor 是基于 Python 的进程管理工具
当执行一些需要以守护进程方式执行的程序,比如一个后台任务,常用它来进程管理。
Supervisor 还能友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中
它有两个主要的组成部分:
1、supervisord,服务守护进程
supervisor 的服务器端称为 supervisord,主要负责在启动自身时 启动所管理的子进程,响应客户端的命令,并在所管理的子进程出现崩溃时自动重启。
2、supervisorctl,命令行客户端
用户可以连接到 supervisord 服务器进程,获得子进程的状态,可以执行 stop、start、restart 等命令,来对这些子进程进行管理。
安装方法
- ubuntu下
apt install supervisor
# 或 pip install supervisor
# 创建配置文件
sudo echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim supervisord.conf
[include]
files = /etc/supervisor/conf.d/*.conf
[inet_http_server]
port=0.0.0.0:9001
username=user
password=123
支持通过浏览器来管理进程,端口 9001
使用 include,跟 Nginx 一样的,可以 include 某个文件夹下的所有配置文件,可以为每个进程单独写一个配置文件。
启动 supervisord
# 指定配置文件
supervisord -c /etc/supervisor/supervisord.conf
# 启动 supervisord
sudo service supervisor start
sudo service supervisor status
- centos下
yum install -y supervisor
# 加入开机自启
sudo systemctl enable supervisord
# 启动supervisord服务
sudo systemctl start supervisord
sudo systemctl status supervisord
开始创建进程
ubuntu 在 /etc/supervisor/conf.d/ 下 .conf 文件
centos 在 /etc/supervisord.d/ 下 .ini 文件
进程的样例:
[program:online-shop]
# 程序的启动目录
directory = /home/python/Desktop/online-store/myshop
environment = PYTHONPATH=/home/python/.virtualenvs/online-store/bin
user = root
command = /home/python/.virtualenvs/online-store/bin/python /home/python/Desktop/online-store/myshop/manage.py runserver --insecure 0.0.0.0:8000
# 在supervisord启动的时候也自动启动
autostart = true
# 启动5秒后没有异常退出,就当作已经正常启动了
startsecs = 5
# 程序异常退出后自动重启
autorestart = true
# 启动失败自动重试次数,默认是 3
startretries = 3
# 把stderr重定向到stdout,默认false,是否将程序错误信息重定向的到文件
redirect_stderr = true
# 程序错误信息输出到该文件
stderr_logfile = /var/log/online-shop.log
supervisor 启动 shell 脚本
[program:zookeeper]
autostart = true
autorestart = true
command = sh /usr/local/zookeeper/bin/zkServer.sh start zoo1.cfg
directory=/usr/local/zookeeper
startsecs=0
user = root
stdout_logfile=/var/log/zookeeper_out.log
报错: FATAL Exited too quickly (process log may have details)
解决:脚本中添加一行, startsecs=0
Supervisor 相关命令
# 重载supervisor
supervisorctl reload
# 更新supervisor
supervisorctl update
# 查看状态
supervisorctl status
# 启动所有/指定的程序进程
supervisorctl start all / aa