安装 Supervisor
虽然可以使用 pip 安装最新版的 supervisor 但是不太推荐,我在 WSL2 下的 Ubuntu 中折腾了2小时,虽然最终成功了,但是最后还是选择简单的一条命令解决问题。爱折腾的小伙伴可以手动尝试尝试,参考
Ubuntu 安装方式
sudo apt install supervisor
CentOS 安装方式
安装过 epel 可以安装最新版的 supervisor
sudo dnf install supervisor
启动和停止 supervisor 等指令
# 启动 Service
systemctl start supervisord
# 停止 Service
systemctl stop supervisord
# 重启 Service
systemctl restart supervisord
或者
# 启动 Service
sudo service supervisor start
# 停止 Service
sudo service supervisor stop
# 重启 Service
sudo service supervisor restart
添加进程
查看 supervisord.conf 文件底部 [include] 部分指定的进程配置目录和进程配置文件的后缀名
先查找 supervisord.conf
find / -name supervisord.conf
Ubuntu 中一般是 /etc/supervisor/supervisord.conf
CentOS 中一般是 /etc/supervisord.conf
Ubuntu
[include] files = /etc/supervisor/conf.d/*.conf
CentOS
[include] files = supervisord.d/*.ini
添加进程配置文件(以 Ubuntu 为例)
在 /etc/supervisor/conf.d 目录下创建 laravel-worker.conf 进程配置文件。
配置文件参考文档:http://supervisord.org/configuration.html
以执行 Laravel 的队列为例,常规配置如下
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php laravel_app_path/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=ztlcoder
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/leblog/storage/logs/worker.log
stopwaitsecs=3600
- process_name 进程名称,通常不需要修改。
- command 需要运行的进程命令(就是把终端中要执行的命令放到此处),示例中的 laravel_app_path 要换成自己 Laravel 应用的路径,最好是绝对路径。
- autostart 指定进程是否在 supervisord 启动时自动启动。
- autorestart 指定如果一个进程在处于 RUNNING 状态时退出,supervisord 是否应该自动重新启动它。
- user 指定 supervisord 使用此用户作为运行进程的帐户(会涉及到目录读写权限的问题,比如要对 stdout_logfile 指定的目录有读写权限)。
- numprocs 启动的进程数,如果 numprocs > 1 则 process_name 中必须包含 %(process_num)s 或者其他包含 process_num 的字符串。
- redirect_stderr 进程的 stderr 输出被送回到 stdout 文件描述符上(其实就相当于执行了 /the/program 2>&1 不往终端上输出运行过程)。
- stdout_logfile 将进程的 stdout 输出放在此文件中(说白了就是把原本显示在终端上的进程的运行过程记录在指定的文件中)。
- stopwaitsecs 在进程被发送停止信号后,等待操作系统向 supervisord 返回 SIGCHLD 的秒数。如果在指定时间内 supervisord 未收到进程发回的 SIGCHLD 则会使用 SIGKILL 来杀掉进程。
启用进程三板斧
```shell重新读取配置文件
sudo supervisorctl reread
更新进程组
sudo supervisorctl update
启动某个 supervisor 进程
sudo supervisorctl start xxxx
<a name="kjjWh"></a>
#### supervisorctl 相关指令
```shell
# 启动某个 supervisor 进程
sudo supervisorctl start xxxx
# 停止某个 supervisor 进程
sudo supervisorctl stop xxxx
# 重启某个 supervisor 进程
sudo supervisorctl restart xxxx
# 启动所有 supervisor 进程
sudo supervisorctl start all
# 停止所有 supervisor 进程
sudo supervisorctl stop all
# 重启所有 supervisor 进程
sudo supervisorctl restart all
# 重新读取配置文件
sudo supervisorctl reread
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
sudo supervisorctl reload
# 更新进程组
sudo supervisorctl update
# 查看 supervisor 进程运行情况
sudo supervisorctl status
开启 web 访问
修改 supervisord.conf 配置
vim /etc/supervisor/supervisord.conf
添加以下内容
[inet_http_server]
port=*:9001
username=admin
password=123456
重启 supervisor 访问 127.0.0.1:9001