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

首頁 > 開發 > PHP > 正文

Laravel框架實現定時發布任務的方法

2024-05-04 21:50:48
字體:
來源:轉載
供稿:網友

本文實例講述了Laravel框架實現定時發布任務的方法。分享給大家供大家參考,具體如下:

背景:需要每隔一小時新建一個任務

http://laravelacademy.org/post/8484.html

Laravel官方自帶這個功能,需要利用到Linux系統的cronTab功能。

1、利用Linux的cronTab功能

(1)進入Linux服務器環境,命令行輸入

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

然后發現在app/Console/Commands路徑下多了一個SendTask.php的文件

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

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

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

  1. protected $commands = [ 
  2. /App/Console/Commands/SendTasks::class
  3. /App/Console/Commands/SendTaskEveryDay::class
  4. /App/Console/Commands/SendTaskEveryWeek::class

schedule里面是定時執行的核心代碼:可以自己直接在里面寫要執行的任務的內容,也可以調用新建的command里的任務執行內容。后面就是說明執行任務的頻次。

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

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

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

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

  1. $cron=Task::where('type''xxx'
  2.  ->first(); 
  3. $cronTab=$cron->jsonSerialize(); 
  4. $task= Task::create($cronTab); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥江县| 古浪县| 柳州市| 新源县| 都江堰市| 临夏市| 锦屏县| 吕梁市| 资源县| 柞水县| 兴安盟| 工布江达县| 中西区| 庐江县| 丹棱县| 台中市| 罗甸县| 宜兴市| 时尚| 通海县| 颍上县| 长岭县| 灵寿县| 明光市| 乡宁县| 玛沁县| 蒙山县| 高邮市| 白朗县| 依安县| 湖口县| 即墨市| 吉林市| 巴东县| 开阳县| 和平县| 新昌县| 申扎县| 克山县| 荆州市| 庆元县|