最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年08月16日 14:14:27   作者:skyisbluening  
這篇文章主要介紹了Laravel框架實現(xiàn)定時發(fā)布任務的方法,結合實例形式分析了使用Linux的cronTab功能實現(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文件中輸入

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

前面第一個目錄是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í)行的任務的內容,也可以調用新建的command里的任務執(zhí)行內容。后面就是說明執(zhí)行任務的頻次。

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

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

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

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

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

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

相關文章

最新評論

八宿县| 余庆县| 怀柔区| 泗阳县| 永平县| 申扎县| 如东县| 邵东县| 塘沽区| 灌云县| 锦屏县| 杭锦旗| 柘城县| 石首市| 吉木乃县| 香格里拉县| 建宁县| 蒙山县| 乐都县| 永德县| 陇西县| 古丈县| 贞丰县| 德兴市| 阜南县| 阿鲁科尔沁旗| 蓝田县| 屏南县| 都兰县| 凤台县| 澳门| 固始县| 武川县| 托克逊县| 来宾市| 合阳县| 兴海县| 北京市| 汪清县| 吉林市| 吴桥县|