Laravel框架實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的方法
本文實(shí)例講述了Laravel框架實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的方法。分享給大家供大家參考,具體如下:
背景:需要每隔一小時(shí)新建一個(gè)任務(wù)
http://laravelacademy.org/post/8484.html
Laravel官方自帶這個(gè)功能,需要利用到Linux系統(tǒng)的cronTab功能。
1、利用Linux的cronTab功能
(1)進(jìn)入Linux服務(wù)器環(huán)境,命令行輸入
crontab -e
這樣就直接進(jìn)入了服務(wù)器下的/var/spool/cron/root文件。如果/var/spool/cron/下還沒(méi)有root文件,輸入上面那個(gè)命令就會(huì)自動(dòng)新建root文件了。
(2)先進(jìn)入文件編輯模式,在root文件中輸入
前面第一個(gè)目錄是php在服務(wù)器上的位置,如果不清楚,可以命令行輸入which php自行查看然后修改。
第二個(gè)目錄是你的laravel項(xiàng)目的存放位置,就是artisan文件所在的根目錄
2、然后在laravel項(xiàng)目目錄下新建任務(wù),命令行輸入
php artisan make:command SendTask
然后發(fā)現(xiàn)在app/Console/Commands路徑下多了一個(gè)SendTask.php的文件
自定義這個(gè)文件的$signature(等會(huì)兒要跟app/Console/Kernel.php文件中的command里面的名稱對(duì)應(yīng),比如我寫(xiě)的是task:send)、$description(對(duì)這個(gè)任務(wù)的描述)、handle()方法中是這個(gè)定時(shí)任務(wù)的主要邏輯代碼。
3、然后修改app/Console/Kernel.php文件
在$commands里要增加剛剛的任務(wù)的存放路徑;要同時(shí)執(zhí)行多個(gè)任務(wù)時(shí),將要同時(shí)執(zhí)行的任務(wù)的class加入到$commands
protected $commands = [ \App\Console\Commands\SendTasks::class, \App\Console\Commands\SendTaskEveryDay::class, \App\Console\Commands\SendTaskEveryWeek::class,
schedule里面是定時(shí)執(zhí)行的核心代碼:可以自己直接在里面寫(xiě)要執(zhí)行的任務(wù)的內(nèi)容,也可以調(diào)用新建的command里的任務(wù)執(zhí)行內(nèi)容。后面就是說(shuō)明執(zhí)行任務(wù)的頻次。
protected function schedule(Schedule $schedule)
{
// $schedule->call(function () {
// Task::create(['title' => '發(fā)送定時(shí)任務(wù)']);
// })->everyMinute();
//調(diào)用artisan
// $schedule->command('tasks:send')->hourly();
$schedule->command('tasks:send')->cron('0 */2 * * *');
$schedule->command('tasks:everyday')->dailyAt('09:00');
其實(shí)到這里已經(jīng)是可以執(zhí)行發(fā)布定時(shí)任務(wù)的期待了,但是我希望可以傳參到這個(gè)定時(shí)任務(wù)里面去,因?yàn)槊看蔚娜蝿?wù)內(nèi)容不一樣,需要達(dá)到可以自定義的效果。在這里糾結(jié)了很久,還嘗試了修改handle()方法,修改成為handle($data),然后在要發(fā)布定時(shí)任務(wù)的時(shí)候調(diào)用這個(gè)handle()方法,然后將參數(shù)通過(guò)$data傳過(guò)來(lái),但是發(fā)現(xiàn)一旦handle()里面帶參數(shù)之后定時(shí)任務(wù)就不能執(zhí)行了,具體原因不知道,但是這個(gè)思路明顯就是錯(cuò)了。
最后走了很多彎路,想到一個(gè)辦法,不能從外部傳參進(jìn)去,就在方法里面把參數(shù)查出來(lái)。我想要的效果就是:新建一個(gè)任務(wù),然后這個(gè)新建的任務(wù)需要每隔1小時(shí)自動(dòng)新建一次。
想到的解決辦法就是在handle()方法里面用sql語(yǔ)句或者查詢構(gòu)造器先把新建的那個(gè)定時(shí)任務(wù)查出來(lái),然后將這個(gè)任務(wù)再新增一次。暫時(shí)能想到的就是這個(gè)辦法,起碼可以達(dá)到我想要的效果了。
$cron=Task::where('type', 'xxx')
->first();
$cronTab=$cron->jsonSerialize();
$task= Task::create($cronTab);
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
- Laravel實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼
- 源碼分析 Laravel 重復(fù)執(zhí)行同一個(gè)隊(duì)列任務(wù)的原因
- Laravel中任務(wù)調(diào)度console使用方法小結(jié)
- Laravel框架數(shù)據(jù)庫(kù)CURD操作、連貫操作總結(jié)
- Laravel框架表單驗(yàn)證詳解
- Laravel框架中擴(kuò)展函數(shù)、擴(kuò)展自定義類的方法
- 跟我學(xué)Laravel之快速入門
- Laravel框架路由配置總結(jié)、設(shè)置技巧大全
- Laravel中使用FormRequest進(jìn)行表單驗(yàn)證方法及問(wèn)題匯總
- Laravel框架定時(shí)任務(wù)2種實(shí)現(xiàn)方式示例
相關(guān)文章
Laravel5.4簡(jiǎn)單實(shí)現(xiàn)app接口Api Token認(rèn)證方法
這篇文章主要介紹了Laravel5.4簡(jiǎn)單實(shí)現(xiàn)app接口Api Token認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
函數(shù)中使用require_once問(wèn)題深入探討 優(yōu)雅的配置文件定義方法推薦
這篇文章主要介紹了函數(shù)中使用require_once問(wèn)題深入探討,優(yōu)雅的配置文件定義方法推薦,最終用一個(gè)靜態(tài)類來(lái)定義配置文件獲勝,完美解決函數(shù)中使用require_once的問(wèn)題,需要的朋友可以參考下2014-07-07
PHP獲取input輸入框中的值去數(shù)據(jù)庫(kù)比較顯示出來(lái)
這篇文章主要介紹了PHP獲取input輸入框中的值去數(shù)據(jù)庫(kù)比較顯示出來(lái)的相關(guān)資料,前端還算比較簡(jiǎn)單,php后臺(tái)接受并查詢,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11
PHP/Laravel如何通過(guò)經(jīng)緯度計(jì)算距離獲取附近商家
實(shí)際開(kāi)發(fā)中,常常需要獲取用戶附近的商家,本文給大家分享PHP/Laravel通過(guò)經(jīng)緯度計(jì)算距離獲取附近商家,感興趣的朋友一起看看吧2023-11-11
yii2高級(jí)應(yīng)用之自定義組件實(shí)現(xiàn)全局使用圖片上傳功能的方法
這篇文章主要介紹了yii2高級(jí)應(yīng)用之自定義組件實(shí)現(xiàn)全局使用圖片上傳功能的方法,結(jié)合實(shí)例形式分析了Yii2自定義組件實(shí)現(xiàn)圖片上傳的相關(guān)步驟與操作技巧,需要的朋友可以參考下2016-10-10
php微信公眾號(hào)開(kāi)發(fā)之答題連闖三關(guān)
這篇文章主要為大家詳細(xì)介紹了php微信公眾號(hào)開(kāi)發(fā)之答題連闖三關(guān),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
php獲取目錄所有文件并將結(jié)果保存到數(shù)組(實(shí)例)
php讀取目錄文件在平時(shí)的開(kāi)發(fā)中還是經(jīng)常要用到的,這里寫(xiě)個(gè)小例子學(xué)習(xí)一下如何用PHP把目錄下文件列出來(lái)。2013-10-10
Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】
這篇文章主要介紹了Smarty緩存機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了Smarty全局緩存、部分緩存及局部緩存三種緩存實(shí)現(xiàn)方式,并附帶說(shuō)明了Smarty清除緩存的實(shí)現(xiàn)方式,需要的朋友可以參考下2019-07-07
ThinkPHP讓../Public在模板不解析(直接輸出)的方法
這篇文章主要介紹了ThinkPHP讓../Public在模板不解析,直接輸出的方法,涉及通過(guò)模板常量設(shè)置修改默認(rèn)變量替換的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10

