您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關laravel5.5中定時任務的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一、準備環境
服務器:linux(debian)+nginx+mysql+php 環境
框架:laravel 5.5 (確認能跑通)
需求:每天晚上1點執行定時操作
二、定時任務的步驟
1、根據文檔,創建命令
首先進入到laravel/app/console 目錄下,Console 目錄包含應用所有自定義的 Artisan 命令,這些命令類可以使用 make:command 命令生成。該目錄下還有 Console/Kernel 類,在這里可以注冊自定義的 Artisan 命令以及定義調度任務。
例如我們創建一個定時任務,名稱為Test:
//這里使用laravel給定的 php artisan來生成命令,此處的Test就是我們要生成的文件 //這里的artisan代表的不僅僅是laravel自帶的命令,他其實是laravel下的artisan目錄,因為這個目錄沒有x,也就是可執行權限,所以不能使用 ./artisan 來執行,只能通過php來執行 php artisan make:command Test
2、創建完之后,打開console目錄下的commands目錄,我們會發現里面已經有了一個文件
大致的代碼如下:
<?php namespace App\Console\Commands; use App\Services\CalculateDataService; use Illuminate\Console\Command; class Test extends Command { //此處代表laravel自動生成的名稱,下面執行的時候能用到 protected $signature = 'test:data'; //此處代表的是描述,并沒有什么用的 protected $description = 'test data'; /** * 計算數據服務的 service 屬性 *這里由于要用到我們的邏輯,所以提前定義一下,方便下面使用 * @var CalculateDataService */ protected $service; //這個是laravel自帶的構造方法。初始狀態下是空的。 //我這里由于要調用CalculateDataService 類的一個方法,所有就用依賴注入的方式引入了一下。 public function __construct(CalculateDataService $service) { parent::__construct(); $this->service = $service; } /** * Execute the console command. *這里就是我們執行操作的地方,里面是command要處理的業務。根據我們的需求, *調用類中的calculateData()方法,該方法是我們自己的需求邏輯部分。 * @return mixed */ public function handle() { try { $this->service->calculateData(); } catch (\Exception $e) { $this->error($e->getMessage()); } // line()方法是command類中自帶的方法,可以輸出我們自定義的信息 $this->line('calculate Data Success!'); } }
3、定時命令創建好之后,我們需要修改kernel.php文件
kernel.php文件里面,主要是定義命令的調度時間,定義命令的執行先后順序等。
這部分參考laravel官方文檔:
http://laravelacademy.org/post/8484.html
4、我的kernel.php文件
<?php //此處省略了命名空間部分 class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. *注:此處是引入我們新創建的類。由于我們此處是使用命令名來操作的,所以沒用上這個類名。不過還是引入比較標準 * 可以使用 command 方法通過命令名或類來調度一個 Artisan 命令: * $schedule->command('emails:send --force')->daily(); * $schedule->command(EmailsCommand::class, ['--force'])->daily(); * * @var array */ protected $commands = [ Test::class, CalculateData::class, UpdateOffset::class, ]; /** * Define the application's command schedule. * 注: * 1、這個方法按照自己的需求,確定定時方法的執行順序。通過after,before等關鍵詞來控制 * 2、此處相當于規定同意的定時執行時間,如都在0:30分執行下面的幾個定時任務 * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // 每天凌晨 0.45 執行同步 aliyun 數據的任務,并發送郵件給 *** $schedule->command('iot:sync Flow') ->after(function() { //更新偏移量,after里面不能加參數 Artisan::call('Test:data'); }) ->after(function () { // 執行同步數據命令完成后 則執行計算數據任務 Artisan::call('calculate:data'); }); } /** * Register the commands for the application. * //這個部分是laravel自動生成的,引入我們生成的命令文件 * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
關于具體的調度方法schedule(),大家可以去laravel文檔看看,里面可以規定很多東西。我這邊是使用的鉤子函數。在同時要執行多個定時任務的時候,通過after,before等方法,可以讓多個定時任務變得有序起來。
三、執行我們的定時
雖然laravel的定時任務一直都說的很強大,但本質上還是離不開服務器上的cron腳本。。
1、先查看服務器上的定時條目
crontab -l
2、新增或編輯cron 條目
crontab -e
3、在里面新增我們寫好的方法路徑
這里面新加上我們的定時任務。
第一是 規定定時任務的執行時間
第二是 要把項目的artisan目錄路徑寫對
第三 schedule:run就是執行咱們之前寫的任務調度,也就是kernel.php文件中的schedule方法。
感謝各位的閱讀!關于“laravel5.5中定時任務的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。