简介

定时任务是后端开发过程中一项十分常见的需求,常出现在数据统计、垃圾信息清理等场景中。Laravel 提供了一整套的定时任务工具,让我们只需要专注地完成逻辑,剩下的基础工作将由它来承担。

基本用法

生成命令

  1. php artisan make:command YourTask

5.2 及之前的版本,此命令为 php artisan make:console xxx

编辑命令

编辑 app/Console/Commands/YourTask.php 文件,代码如下:

  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Traits\LogTrait;
  5. class YourTask extends Command
  6. {
  7. use LogTrait;
  8. protected $signature = 'task:doIt'; // 命令名称,用来在command里用的,一个标识吧
  9. protected $description = '一个能用的lavravel定时任务'; // 命令描述,没什么用
  10. /**
  11. * Create a new command instance.
  12. *
  13. * @return void
  14. */
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. }
  19. /**
  20. * Execute the console command.
  21. *
  22. * @return mixed
  23. */
  24. public function handle()
  25. {
  26. //这里写你的代码
  27. $this->logsForSample('task cron invoke', ['id' => 1234567890]);
  28. }
  29. }

注册命令

编辑 app/Console/Kernel.php 文件,将新生成的类进行注册:

  1. protected $commands = [
  2. \App\Console\Commands\YourTask::class,
  3. ];

编写调用逻辑:

  1. protected function schedule(Schedule $schedule)
  2. {
  3. $schedule->command('task:doIt') //还记得上面的$signature么?
  4. ->timezone('Asia/Shanghai')
  5. ->everyMinute();
  6. }

上面的逻辑是每分钟调用一次。Laravel 提供了从一分钟到一年的各种长度的时间函数,直接调用即可。

把这个 Laravel 项目注册到系统的 cron 里

编辑 /etc/crontab 文件,加入如下代码:

  1. * * * * * root /usr/bin/php /var/www/xxxlaravel/artisan
  2. schedule:run >> /dev/null 2>&1

上面一行中的 /var/www/xxxlaravel 需要改为实际的路径。

fire

重启 cron 激活此功能:systemctl restart crond.service,搞定!

分类: web

标签:   laravel