佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo)

關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo)

熱門標(biāo)簽:Linux服務(wù)器 Mysql連接數(shù)設(shè)置 阿里云 電子圍欄 團(tuán)購(gòu)網(wǎng)站 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 服務(wù)器配置 銀行業(yè)務(wù)

一、準(zhǔn)備環(huán)境

服務(wù)器:linux(debian)+nginx+mysql+php 環(huán)境

框架:laravel 5.5 (確認(rèn)能跑通)

需求:每天晚上1點(diǎn)執(zhí)行定時(shí)操作

二、定時(shí)任務(wù)的步驟

1、根據(jù)文檔,創(chuàng)建命令

首先進(jìn)入到laravel/app/console 目錄下,Console 目錄包含應(yīng)用所有自定義的 Artisan 命令,這些命令類可以使用 make:command 命令生成。該目錄下還有 Console/Kernel 類,在這里可以注冊(cè)自定義的 Artisan 命令以及定義調(diào)度任務(wù)。

例如我們創(chuàng)建一個(gè)定時(shí)任務(wù),名稱為Test:

//這里使用laravel給定的 php artisan來(lái)生成命令,此處的Test就是我們要生成的文件
//這里的artisan代表的不僅僅是laravel自帶的命令,他其實(shí)是laravel下的artisan目錄,因?yàn)檫@個(gè)目錄沒(méi)有x,也就是可執(zhí)行權(quán)限,所以不能使用 ./artisan 來(lái)執(zhí)行,只能通過(guò)php來(lái)執(zhí)行
php artisan make:command Test

2、創(chuàng)建完之后,打開(kāi)console目錄下的commands目錄,我們會(huì)發(fā)現(xiàn)里面已經(jīng)有了一個(gè)文件

大致的代碼如下:

?php

namespace App\Console\Commands;

use App\Services\CalculateDataService;
use Illuminate\Console\Command;

class Test extends Command
{
 //此處代表laravel自動(dòng)生成的名稱,下面執(zhí)行的時(shí)候能用到
 protected $signature = 'test:data';

 //此處代表的是描述,并沒(méi)有什么用的
 protected $description = 'test data';

 /**
 * 計(jì)算數(shù)據(jù)服務(wù)的 service 屬性
 *這里由于要用到我們的邏輯,所以提前定義一下,方便下面使用
 * @var CalculateDataService
 */
 protected $service;

 //這個(gè)是laravel自帶的構(gòu)造方法。初始狀態(tài)下是空的。
 //我這里由于要調(diào)用CalculateDataService 類的一個(gè)方法,所有就用依賴注入的方式引入了一下。
 public function __construct(CalculateDataService $service)
 {
 parent::__construct();

 $this->service = $service;
 }

 /**
 * Execute the console command.
 *這里就是我們執(zhí)行操作的地方,里面是command要處理的業(yè)務(wù)。根據(jù)我們的需求,
 *調(diào)用類中的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、定時(shí)命令創(chuàng)建好之后,我們需要修改kernel.php文件

kernel.php文件里面,主要是定義命令的調(diào)度時(shí)間,定義命令的執(zhí)行先后順序等。

這部分參考laravel官方文檔:

http://laravelacademy.org/post/8484.html

4、我的kernel.php文件

?php
//此處省略了命名空間部分
class Kernel extends ConsoleKernel
{
 /**
 * The Artisan commands provided by your application.
 *注:此處是引入我們新創(chuàng)建的類。由于我們此處是使用命令名來(lái)操作的,所以沒(méi)用上這個(gè)類名。不過(guò)還是引入比較標(biāo)準(zhǔn)
 * 可以使用 command 方法通過(guò)命令名或類來(lái)調(diào)度一個(gè) 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、這個(gè)方法按照自己的需求,確定定時(shí)方法的執(zhí)行順序。通過(guò)after,before等關(guān)鍵詞來(lái)控制
 * 2、此處相當(dāng)于規(guī)定同意的定時(shí)執(zhí)行時(shí)間,如都在0:30分執(zhí)行下面的幾個(gè)定時(shí)任務(wù)
 * @param \Illuminate\Console\Scheduling\Schedule $schedule
 * @return void
 */
 protected function schedule(Schedule $schedule)
 {
 // 每天凌晨 0.45 執(zhí)行同步 aliyun 數(shù)據(jù)的任務(wù),并發(fā)送郵件給 ***
  $schedule->command('iot:sync Flow')
  ->after(function() {
   //更新偏移量,after里面不能加參數(shù)
  Artisan::call('Test:data');
  })
  ->after(function () {
  // 執(zhí)行同步數(shù)據(jù)命令完成后 則執(zhí)行計(jì)算數(shù)據(jù)任務(wù)
  Artisan::call('calculate:data');
  });
 }

 /**
 * Register the commands for the application.
 * //這個(gè)部分是laravel自動(dòng)生成的,引入我們生成的命令文件
 * @return void
 */
 protected function commands()
 {
 $this->load(__DIR__.'/Commands');

 require base_path('routes/console.php');
 }
}

關(guān)于具體的調(diào)度方法schedule(),大家可以去laravel文檔看看,里面可以規(guī)定很多東西。我這邊是使用的鉤子函數(shù)。在同時(shí)要執(zhí)行多個(gè)定時(shí)任務(wù)的時(shí)候,通過(guò)after,before等方法,可以讓多個(gè)定時(shí)任務(wù)變得有序起來(lái)。

三、執(zhí)行我們的定時(shí)

雖然laravel的定時(shí)任務(wù)一直都說(shuō)的很強(qiáng)大,但本質(zhì)上還是離不開(kāi)服務(wù)器上的cron腳本。。

1、先查看服務(wù)器上的定時(shí)條目

crontab -l

2、新增或編輯cron 條目

crontab -e

3、在里面新增我們寫好的方法路徑

這里面新加上我們的定時(shí)任務(wù)。

第一是 規(guī)定定時(shí)任務(wù)的執(zhí)行時(shí)間

第二是 要把項(xiàng)目的artisan目錄路徑寫對(duì)

第三 schedule:run就是執(zhí)行咱們之前寫的任務(wù)調(diào)度,也就是kernel.php文件中的schedule方法。

如果是大家自己測(cè)試的話,可以隨便寫個(gè)定時(shí)任務(wù),每分鐘執(zhí)行以下,這樣就能準(zhǔn)確的知道自己的定時(shí)任務(wù)是否正確了。

以上這篇關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Laravel定時(shí)任務(wù)的每秒執(zhí)行代碼
  • Laravel框架定時(shí)任務(wù)2種實(shí)現(xiàn)方式示例
  • Laravel實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼

標(biāo)簽:萍鄉(xiāng) 衡水 江蘇 衢州 棗莊 蚌埠 大理 廣元

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于laravel5.5的定時(shí)任務(wù)詳解(demo)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    肇庆市| 云霄县| 南充市| 阿巴嘎旗| 临汾市| 黑水县| 阿坝县| 遂昌县| 石河子市| 定边县| 泰兴市| 乌鲁木齐县| 迁西县| 宁陵县| 滕州市| 丁青县| 浑源县| 吴桥县| 湖口县| 沅陵县| 黎平县| 台南市| 昌邑市| 上虞市| 南平市| 盐山县| 长武县| 布拖县| 和林格尔县| 文登市| 双鸭山市| 苍南县| 中西区| 翁源县| 祁东县| 巢湖市| 双鸭山市| 东海县| 青岛市| 溧水县| 昌图县|