国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

Laravel框架實(shí)現(xiàn)定時(shí)發(fā)布任務(wù)的方法

2024-05-05 00:05:03
字體:
供稿:網(wǎng)友

本文實(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/下還沒有root文件,輸入上面那個(gè)命令就會(huì)自動(dòng)新建root文件了。

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

復(fù)制代碼代碼如下:
* * * * * /usr/local/php/bin/php  /opt/xxx/xxx/artisan  schedule:run 1>> /dev/null 2>&1

 

前面第一個(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),比如我寫的是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í)行的核心代碼:可以自己直接在里面寫要執(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ā)送定時(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ù)通過$data傳過來,但是發(fā)現(xiàn)一旦handle()里面帶參數(shù)之后定時(shí)任務(wù)就不能執(zhí)行了,具體原因不知道,但是這個(gè)思路明顯就是錯(cuò)了。

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

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

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

希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 屏山县| 辉县市| 南丰县| 炉霍县| 门源| 庆安县| 西林县| 南华县| 白水县| 财经| 营口市| 安顺市| 荔波县| 健康| 澄城县| 政和县| 科技| 蒙城县| 泾源县| 团风县| 贡觉县| 黑山县| 潞西市| 井陉县| 茌平县| 梁河县| 瑞丽市| 绵竹市| 红桥区| 叙永县| 阿克苏市| 兴和县| 高邑县| 桂林市| 无锡市| 西峡县| 稷山县| 临夏县| 任丘市| 潮州市| 海晏县|