laravel队列之Supervisor守护进程(centos篇)

前言

ubuntu和centos均为linux系统,官方为我们提供了Homestead可以很好的模拟在服务器中的开发和运行。之前写了一篇基于Homestead(ubuntu)关于Supervisor守护进程的文章:
laravel队列之Supervisor守护进程(ubuntu篇)
那么在正式环境中,如何使用呢?(在此建议使用docker,谁用谁知道)

附:

参考文章:
centos7安装supervisor详细教程
Centos7 中使用Supervisor守护进程
EPEL源-是什么全称
centos 7 使用supervisor 管理laravel 队列

开始

一、安装

1.执行安装EPEL源(详情可以查看参考文章:EPEL源-是什么全称):
#安装EPEL源,详情可以查看参考文章
yum install epel-release

选择y或者d(yes和default)

2.安装supervisor
yum install -y supervisor

3.开机自启动
systemctl enable supervisord

4.启动supervisord服务
systemctl start supervisord

5.查看supervisord服务状态

systemctl status supervisord 

配置

centosubuntu的配置有差异。

在homestead的ubuntu中,Supervisor 配置文件通常存储在 /etc/supervisor/conf.d目录(默认有这supervisor目录)。在此目录中,你可以创建任意数量的配置文件,这些配置文件将指示 supervisor 如何监视你的进程。supervisor.conf是存放于supervisor目录下,和conf.d同级;conf.d一般是存放自定义队列进程配置文件。
而在centos中,没有conf.d文件夹,只有supervisor.confsupervisor.d目录:

/etc/supervisor/conf.d/supervisor.conf(ubuntu)/etc/supervisor.d/supervisor.conf(centos)两者差异:

一个是加载.conf文件,一个是.ini文件,注意区别。当然,如果你把配置文件放置在自定义位置,请记得修改supervisor.conf的路径。

配置文件:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
#指令 /home/vagrant/code/test请替换成自己项目路径
command=php /home/vagrant/code/test/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
#用户名
user=root
numprocs=8
redirect_stderr=true
#运行日志
stdout_logfile=/home/forge/app.com/worker.log
stopwaitsecs=3600

注意

这里可能会有一个坑
在队列文件worker.log和laravel.log中会有报错信息,不处理的话会一直写入:

pcntl_signal() has been disabled for security reasons
at xxx/vendor/laravel/framework/src/Illuminate/Queue/Worker.php:643
pcntl_alarm()has been disabled for security reasons
at xxx/vendor/laravel/framework/src/Illuminate/Queue/Worker.php:643

这是因为在centos的php中,这两个函数是默认禁用的,如果使用宝塔面板,可以在php→设置→禁用函数中找到这两个函数,删除即可;
或者可以在php.ini中找到disable_functions,找到两者,删除即可,两种方法效果一样。

使用

用上一篇文章的代码:

控制器:
use App\Jobs\FlowQueue;
$user = [
    'uid'=>1,
    'name'=>'李大',
    'phone'=>'1399999999',
    'score'=>[
        'chinese'=>(double)1100,
        'math'=>(double)1000,
        'english'=>(double)900,
    ],
    'type'=>2
];
FlowQueue::dispatch($user);
队列:
class FlowQueue implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $accessLogs;

    /**
     * Create a new job instance.
     *
     * @param AccessLog $accessLogs
     */
    public function __construct($accessLogs)
    {
        //
        $this->accessLogs = $accessLogs;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        $logs = $this->accessLogs;
        AccessLog::create($logs);
    }
}

执行结果:

队列日志:

至此,centos篇的Supervisor守护进程完成。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4

不是ubuntu吗?

9个月前 评论
Weiwen (作者) 9个月前
她来听我的演唱会 (楼主) 9个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!