關於定時任務的一些步驟。
前幾天寫了個佇列來實現運營定時推送任務的功能,被leader噴了,原話是laravel的佇列效能不好。於是請教了另一位前輩,據說,只需把laravel的佇列實現底層邏輯由陣列改為雙向連結串列即可。我尋思著,那我特麼還不如改定時!
- 建立定時檔案
#生成定時任務的檔案 php artisan make:command JPushJobs
注意:建立檔案一般為make語句,用php artisan檢視,建立定時任務:
make:command
建立佇列:make:job
建立事件:make:event
建立控制類:make:controller
生成頻道:make:channel
等等
生成的定時檔案內容如下所示
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class JPushJobs extends Command
{
/**
* The name and signature of the console command.這裡為定時任務的簽名,根據這裡的定義呼叫定時任務為:php artisan j-push:jobs
*
* @var string
*/
protected $signature = 'j-push:jobs';
/**
* The console command description.這裡是在php artisan裡的命令描述
*
* @var string
*/
protected $description = '後臺定時推送的任務';
protected $pushInfoService;
/**
* Create a new command instance.
* JPushJobs constructor.
* @param PushInfoService $pushInfoService
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//此處增加相關處理邏輯
}
}
將定時任務加入
Kernel
管理
在Kernel.php檔案中加入上一步定義好的定時任務,如下// 每分鐘執行一次任務 $schedule->command('j-push:jobs')->everyMinute();
注意:
command
裡放定時任務的簽名,即定時任務中$signature
的定義。其中everyMinute()
表示此任務每分鐘執行一次,如果是其他時間可以用其他方法,比如 每小時執行一次hourly()
、每天凌晨4點執行一次dailyAt('4:00')
、自定義比如每兩小時執行一次cron('0 */2 * * *')
也可以直接將定時任務放入linux的定時任務管理
命令後crontab -e
進入定時任務管理指令碼,然後加入管理語句
#將/your-project替換成你的專案目錄
*/1 * * * * php /your-project/artisan j-push:jobs
注意:定時任務是一個掛載在後臺的獨立的程式,不需要像佇列一樣在方法中呼叫
本作品採用《CC 協議》,轉載必須註明作者和本文連結