Laravel框架實現(xiàn)定時發(fā)布任務的方法
本文實例講述了Laravel框架實現(xiàn)定時發(fā)布任務的方法。分享給大家供大家參考,具體如下:
背景:需要每隔一小時新建一個任務
http://laravelacademy.org/post/8484.html
Laravel官方自帶這個功能,需要利用到Linux系統(tǒng)的cronTab功能。
1、利用Linux的cronTab功能
(1)進入Linux服務器環(huán)境,命令行輸入
crontab -e
這樣就直接進入了服務器下的/var/spool/cron/root文件。如果/var/spool/cron/下還沒有root文件,輸入上面那個命令就會自動新建root文件了。
(2)先進入文件編輯模式,在root文件中輸入
前面第一個目錄是php在服務器上的位置,如果不清楚,可以命令行輸入which php
自行查看然后修改。
第二個目錄是你的laravel項目的存放位置,就是artisan文件所在的根目錄
2、然后在laravel項目目錄下新建任務,命令行輸入
php artisan make:command SendTask
然后發(fā)現(xiàn)在app/Console/Commands路徑下多了一個SendTask.php的文件
自定義這個文件的$signature(等會兒要跟app/Console/Kernel.php文件中的command里面的名稱對應,比如我寫的是task:send)
、$description(對這個任務的描述)
、handle()
方法中是這個定時任務的主要邏輯代碼。
3、然后修改app/Console/Kernel.php文件
在$commands里要增加剛剛的任務的存放路徑;要同時執(zhí)行多個任務時,將要同時執(zhí)行的任務的class加入到$commands
protected $commands = [ \App\Console\Commands\SendTasks::class, \App\Console\Commands\SendTaskEveryDay::class, \App\Console\Commands\SendTaskEveryWeek::class,
schedule里面是定時執(zhí)行的核心代碼:可以自己直接在里面寫要執(zhí)行的任務的內(nèi)容,也可以調(diào)用新建的command里的任務執(zhí)行內(nèi)容。后面就是說明執(zhí)行任務的頻次。
protected function schedule(Schedule $schedule) { // $schedule->call(function () { // Task::create(['title' => '發(fā)送定時任務']); // })->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ā)布定時任務的期待了,但是我希望可以傳參到這個定時任務里面去,因為每次的任務內(nèi)容不一樣,需要達到可以自定義的效果。在這里糾結(jié)了很久,還嘗試了修改handle()
方法,修改成為handle($data)
,然后在要發(fā)布定時任務的時候調(diào)用這個handle()
方法,然后將參數(shù)通過$data
傳過來,但是發(fā)現(xiàn)一旦handle()
里面帶參數(shù)之后定時任務就不能執(zhí)行了,具體原因不知道,但是這個思路明顯就是錯了。
最后走了很多彎路,想到一個辦法,不能從外部傳參進去,就在方法里面把參數(shù)查出來。我想要的效果就是:新建一個任務,然后這個新建的任務需要每隔1小時自動新建一次。
想到的解決辦法就是在handle()
方法里面用sql語句或者查詢構(gòu)造器先把新建的那個定時任務查出來,然后將這個任務再新增一次。暫時能想到的就是這個辦法,起碼可以達到我想要的效果了。
$cron=Task::where('type', 'xxx') ->first(); $cronTab=$cron->jsonSerialize(); $task= Task::create($cronTab);
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP批量查詢WordPress留言者E-mail地址實現(xiàn)方法
這篇文章主要介紹了PHP批量查詢WordPress留言者E-mail地址實現(xiàn)方法,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-02-02PHP xpath提取網(wǎng)頁數(shù)據(jù)內(nèi)容代碼解析
這篇文章主要介紹了PHP xpath提取網(wǎng)頁數(shù)據(jù)內(nèi)容代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07詳解Grunt插件之LiveReload實現(xiàn)頁面自動刷新(兩種方案)
這篇文章主要通過兩種方案詳解Grunt插件之LiveReload實現(xiàn)頁面自動刷新,需要的朋友可以參考下2015-07-07