前言
unbutun和centos均為linux系統,官方為我們提供了Homestead可以很好的模擬在伺服器中的開發和執行。之前寫了一篇基於Homestead(unbutun)關於Supervisor守護程式的文章:
laravel佇列之Supervisor守護程式(unbutun篇)
那麼在正式環境中,如何使用呢?(在此建議使用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
和unbutun
的配置有差異。
在homestead的unbutun中,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(unbutun)
和/etc/supervisor/supervisor.conf(unbutun)
兩者差異:
一個是載入.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 協議》,轉載必須註明作者和本文連結