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

前言

unbutun和centos均为linux系统,官方为我们提供了Homestead可以很好的模拟在服务器中的开发和运行。之前写了一篇基于Homestead(unbutun)关于Supervisor守护进程的文章:

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

那么在正式环境中,如何使用呢?(在此建议使用docker,谁用谁知道)

附:

开始

一、安装

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

#安装EPEL源,详情可以查看参考文章

yum install epel-release

选择y或者d(yes和default)

40949229281a1bb22fc62e440b7bf29e.png

2.安装supervisor

yum install -y supervisor

1424e6c9490a688fd0c23b566c412939.png

3.开机自启动

systemctl enable supervisord

8c75ae816a2162152726d56a17e7f1a6.png

4.启动supervisord服务

systemctl start supervisord

5.查看supervisord服务状态

systemctl status supervisord

9e05f651ec47e7cc708e66297e97fc2c.png

配置

centos和unbutun的配置有差异。

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

而在centos中,没有conf.d文件夹,只有supervisor.conf和supervisor.d目录:

2d48ef9d5c0fbf5dad1d6ab5894adc0f.png

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

45f42ce26e554976c94b80b760c51ec2.png

一个是加载.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

pcntl_alarm — 为进程设置一个alarm闹钟信号。

这是因为在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);

}

}

执行结果:

fad1db6fbebbc80edd3e9871568bfa0e.png

队列日志:

29520287fca72ee6e39e8b409f87af79.png

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

本作品采用《CC 协议》,转载必须注明作者和本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值