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 协议》,转载必须注明作者和本文链接
推荐文章: