溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Laravel定時發(fā)布任務(wù)

發(fā)布時間:2021-05-14 17:02:50 來源:億速云 閱讀:162 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何使用Laravel定時發(fā)布任務(wù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1、利用Linux的cronTab功能

(1)進入Linux服務(wù)器環(huán)境,命令行輸入

crontab -e

這樣就直接進入了服務(wù)器下的/var/spool/cron/root文件。如果/var/spool/cron/下還沒有root文件,輸入上面那個命令就會自動新建root文件了。

(2)先進入文件編輯模式,在root文件中輸入

復(fù)制代碼 代碼如下:

* * * * * /usr/local/php/bin/php  /opt/xxx/xxx/artisan  schedule:run 1>> /dev/null 2>&1

前面第一個目錄是php在服務(wù)器上的位置,如果不清楚,可以命令行輸入which php自行查看然后修改。

第二個目錄是你的laravel項目的存放位置,就是artisan文件所在的根目錄

2、然后在laravel項目目錄下新建任務(wù),命令行輸入

php artisan make:command SendTask

然后發(fā)現(xiàn)在app/Console/Commands路徑下多了一個SendTask.php的文件

自定義這個文件的$signature(等會兒要跟app/Console/Kernel.php文件中的command里面的名稱對應(yīng),比如我寫的是task:send)$description(對這個任務(wù)的描述)、handle()方法中是這個定時任務(wù)的主要邏輯代碼。

3、然后修改app/Console/Kernel.php文件

在$commands里要增加剛剛的任務(wù)的存放路徑;要同時執(zhí)行多個任務(wù)時,將要同時執(zhí)行的任務(wù)的class加入到$commands

protected $commands = [
\App\Console\Commands\SendTasks::class,
\App\Console\Commands\SendTaskEveryDay::class,
\App\Console\Commands\SendTaskEveryWeek::class,

schedule里面是定時執(zhí)行的核心代碼:可以自己直接在里面寫要執(zhí)行的任務(wù)的內(nèi)容,也可以調(diào)用新建的command里的任務(wù)執(zhí)行內(nèi)容。后面就是說明執(zhí)行任務(wù)的頻次。

protected function schedule(Schedule $schedule)
{
//  $schedule->call(function () {
//   Task::create(['title' => '發(fā)送定時任務(wù)']);
//  })->everyMinute();
//調(diào)用artisan
// $schedule->command('tasks:send')->hourly();
$schedule->command('tasks:send')->cron('0 */2 * * *');
$schedule->command('tasks:everyday')->dailyAt('09:00');

其實到這里已經(jīng)是可以執(zhí)行發(fā)布定時任務(wù)的期待了,但是我希望可以傳參到這個定時任務(wù)里面去,因為每次的任務(wù)內(nèi)容不一樣,需要達到可以自定義的效果。在這里糾結(jié)了很久,還嘗試了修改handle()方法,修改成為handle($data),然后在要發(fā)布定時任務(wù)的時候調(diào)用這個handle()方法,然后將參數(shù)通過$data傳過來,但是發(fā)現(xiàn)一旦handle()里面帶參數(shù)之后定時任務(wù)就不能執(zhí)行了,具體原因不知道,但是這個思路明顯就是錯了。

最后走了很多彎路,想到一個辦法,不能從外部傳參進去,就在方法里面把參數(shù)查出來。我想要的效果就是:新建一個任務(wù),然后這個新建的任務(wù)需要每隔1小時自動新建一次。

想到的解決辦法就是在handle()方法里面用sql語句或者查詢構(gòu)造器先把新建的那個定時任務(wù)查出來,然后將這個任務(wù)再新增一次。暫時能想到的就是這個辦法,起碼可以達到我想要的效果了。

$cron=Task::where('type', 'xxx')
 ->first();
$cronTab=$cron->jsonSerialize();
$task= Task::create($cronTab);

Laravel 是什么

Laravel 是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構(gòu)建一個完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達力。

上述就是小編為大家分享的如何使用Laravel定時發(fā)布任務(wù)了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI