Supervisor 是一个进程管理工具,当进程中断的时候 supervisor 能自动重新启动它,同时,它也是一个客户端/服务器系统,允许用户在类 unix 操作系统上控制多个进程。
Supervisor 是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启。
Supervisor 是通过 fork/exec 的方式把这些被管理的进程当作 Supervisor 的子进程来启动,这样只要在 Supervisor 的配置文件中,把要管理的进程的可执行文件的路径写进去即可。
接下来我们重点学习它的使用方式。
Supervisor 一些常用命令
命令 | 说明 |
---|---|
supervisorctl reload | 重启 supervisor (添加完自己的配置信息后,可以执行此命令来重新加载 supervisor 配置文件) |
supervisorctl status <程序名> | 查看状态,后面不加程序名的话是查看所有任务状态 |
supervisorctl shutdown | 关闭所有任务 |
supervisorctl start <程序名> | 启动任务 |
supervisorctl stop <程序名> | 关闭任务 |
在阿里云 CentOS 7.6 上
- 安装 supervisor
yum install -y supervisor
- 查看主配置信息
supervisord.conf
留意include
选项
cat /etc/supervisord.conf
# 这里决定了你所需要写的进程配置文件格式,这里是 ini ,因此我们也必须写成 ini 后缀的文件
[include]
files = supervisord.d/*.ini
- 添加自定义进程配置信息
vim /etc/supervisord.d/larablog.ini
[program:larablog-horizon]
process_name=%(program_name)s
command=php /www/wwwroot/larablog/artisan horizon
autostart=true
autorestart=true
user=www
redirect_stderr=true
stdout_logfile=/www/wwwroot/larablog/storage/logs/worker.log
- program:larablog-horizon 代表这个配置的名称是 larablog-horizon;
- process_name= 代表这个进程在 Supervisor 内部的命名;
- command= 代表要执行的命令;
- autostart=true 代表这个进程跟随 Supervisor,只要 Supervisor 启动了,就启动这个进程;
- autorestart=true 代表要求 Supervisor 监听进程状态,假如异常退出就再次启动,重启次数默认有 3 次限制;
- user=www 代表以 www 身份启动进程;
- redirect_stderr=true 代表输出错误信息;
- stdout_logfile= 代表将进程的输出保存到日志文件中。
- 更新配置
sudo supervisorctl update
如果遇到报错 error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
则执行以下命令
sudo supervisord -c /etc/supervisord.conf
# 再次尝试执行重载配置命令
sudo supervisorctl update
sudo supervisorctl -c /etc/supervisord.conf
- 查看进程状态
sudo supervisorctl status
在 ubuntu 上
- 安装 supervisor
sudo apt-get install supervisor
- 添加自定义进程配置信息
vim /etc/supervisor/conf.d/larablog.conf
[program:larablog-horizon]
process_name=%(program_name)s
command=php /www/wwwroot/larablog/artisan horizon
autostart=true
autorestart=true
user=www
redirect_stderr=true
stdout_logfile=/www/wwwroot/larablog/storage/logs/worker.log
- 更新配置
sudo supervisorctl update
- 检查是否正常运行
sudo supervisorctl status
- 单独启动一个指定名称的进程
sudo supervisorctl start <process-name>
# 比如启动名称为 larablog-horizon 的进程
sudo supervisorctl start larablog-horizon
网友评论