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
配置
centos
和ubuntu
的配置有差异。
在homestead的ubuntu中,Supervisor 配置文件通常存储在 /etc/supervisor/conf.d
目录(默认有这supervisor目录)。在此目录中,你可以创建任意数量的配置文件,这些配置文件将指示 supervisor 如何监视你的进程。supervisor.conf是存放于supervisor
目录下,和conf.d
同级;conf.d
一般是存放自定义队列进程配置文件。
而在centos中,没有conf.d
文件夹,只有supervisor.conf
和supervisor.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
- pcntl_alarm — 为进程设置一个alarm闹钟信号。
- pcntl_signal — 安装一个信号处理器
这是因为在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 协议》,转载必须注明作者和本文链接
推荐文章: