Laravel 5计划不起作用

时间:2015-06-05 10:30:39

标签: php laravel cron laravel-5

我的laravel版本是5.0.28,我在cloud9上构建,我将此命令添加到我的cron:

#!/bin/bash
PATH=/usr/bin
* * * * * php /home/ubuntu/workspace/app/artisan scheduled:run 1>> /dev/null 2>&1

我在Kernel.php上添加了此代码。我引用了这个网站:https://laravel-news.com/2014/11/laravel-5-scheduler/

<?php namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Http\Controllers\ApiController;

class Kernel extends ConsoleKernel {

    protected $commands = [
        'App\Console\Commands\Inspire',
    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->call('ApiController@test_job')->hourly();
    }
}

我等了,但仍然没有用,所以我尝试使用命令php artisan schedule:run,我得到了:No scheduled commands are ready to run.

我搜索并找到了这个答案:Laravel 5 "Class does not exist" when using the scheduler

所以我修改了我的代码。此外,此代码没有指定的时间,因此我修改了cron以指定时间,但它仍然无效。我没有更多的想法。请帮忙。感谢。

$schedule->call(join('@', [ApiController::class, 'test_job']));

的cron

0 0,3,6,9,12,15,18,21 * * * php /home/ubuntu/workspace/app/artisan schedule:run 1>> /dev/null 2>&1
30 1,4,7,10,13,16,19,22 * * * php /home/ubuntu/workspace/app/artisan schedule:run 1>> /dev/null 2>&1

4 个答案:

答案 0 :(得分:11)

首先测试cron是否在您的服务器或localhost类型中运行:

> sudo service cron status

如果没有安装:

> sudo apt-get install cron

启用laravel的调度程序:

> crontab -e

如果没有直接打开vim,你可以选择一个编辑器。一定要在底部输入这一行:

* * * * * php /path_from_root_to_laravel_proj_folder/artisan schedule:run 1>> /dev/null 2>&1

要测试你是否在调度程序中设置了laravel,请从你的项目文件夹中运行它:

>php artisan schedule:run

这应该执行任务并告诉你正在做什么。

答案 1 :(得分:9)

Laravel scheduler使用命令,而不是控制器方法:

  1. 创建命令:
  2. php artisan make:command PurchasePodcast
    
    1. 编辑命令:
    2. namespace App\Console\Commands;
      
      use Illuminate\Console\Command;
      
      class PurchasePodcast extends Command
      {
          protected $name = 'purchase:podcast';
      
          public function fire()
          {
              // do stuff here
          }
      }
      
      1. 将命令添加到Console\Kernel.php
      2. protected $commands = [
            'App\Console\Commands\PurchasePodcast',
        ];
        
        1. 在调度程序中使用命令:
        2. $schedule->command('purchase:podcast')->hourly();
          

答案 2 :(得分:1)

有几个方面可以找到原因:   首先,检查&#39;时区&#39;在config / app.php中设置正确。即使你已经在php.ini中配置了Laravel,它也会重置时区。   其次,检查crontab是否按预期工作。当您收到消息&#34;没有计划准备好&#34;时,这意味着您的crontab正在运行并且可以检测到php和artisan命令。

答案 3 :(得分:0)

为了完成@ limonte的回答,创建控制台命令如下:

php artisan make:console CampaignsCollect --command=campaigns:collect

参考此处:link