安装 Supervisor

虽然可以使用 pip 安装最新版的 supervisor 但是不太推荐,我在 WSL2 下的 Ubuntu 中折腾了2小时,虽然最终成功了,但是最后还是选择简单的一条命令解决问题。爱折腾的小伙伴可以手动尝试尝试,参考

Ubuntu 安装方式

sudo apt install supervisor

CentOS 安装方式

安装过 epel 可以安装最新版的 supervisor

sudo dnf install supervisor

启动和停止 supervisor 等指令

  1. # 启动 Service
  2. systemctl start supervisord
  3. # 停止 Service
  4. systemctl stop supervisord
  5. # 重启 Service
  6. systemctl restart supervisord

或者

  1. # 启动 Service
  2. sudo service supervisor start
  3. # 停止 Service
  4. sudo service supervisor stop
  5. # 重启 Service
  6. 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 的队列为例,常规配置如下

  1. [program:laravel-worker]
  2. process_name=%(program_name)s_%(process_num)02d
  3. command=php laravel_app_path/artisan queue:work redis --sleep=3 --tries=3
  4. autostart=true
  5. autorestart=true
  6. user=ztlcoder
  7. numprocs=1
  8. redirect_stderr=true
  9. stdout_logfile=/var/www/html/leblog/storage/logs/worker.log
  10. 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

  1. <a name="kjjWh"></a>
  2. #### supervisorctl 相关指令
  3. ```shell
  4. # 启动某个 supervisor 进程
  5. sudo supervisorctl start xxxx
  6. # 停止某个 supervisor 进程
  7. sudo supervisorctl stop xxxx
  8. # 重启某个 supervisor 进程
  9. sudo supervisorctl restart xxxx
  10. # 启动所有 supervisor 进程
  11. sudo supervisorctl start all
  12. # 停止所有 supervisor 进程
  13. sudo supervisorctl stop all
  14. # 重启所有 supervisor 进程
  15. sudo supervisorctl restart all
  16. # 重新读取配置文件
  17. sudo supervisorctl reread
  18. # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
  19. sudo supervisorctl reload
  20. # 更新进程组
  21. sudo supervisorctl update
  22. # 查看 supervisor 进程运行情况
  23. sudo supervisorctl status

开启 web 访问

修改 supervisord.conf 配置

vim /etc/supervisor/supervisord.conf

添加以下内容

  1. [inet_http_server]
  2. port=*:9001
  3. username=admin
  4. password=123456

重启 supervisor 访问 127.0.0.1:9001