为什么我的cron job laravel 5.3不能在localhost上工作?

时间:2017-01-10 03:05:21

标签: php laravel cron laravel-5.3

我正在使用Windows。

\app\Console\Kernel.php上的代码是这样的:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        Commands\CustomCommand::class,
    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('custom:command')
                 ->everyMinute();
    }

    protected function commands()
    {
        require base_path('routes/console.php');
    }
}

\app\Console\Commands\CustomCommand.php上的代码是这样的:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use DB;

class CustomCommand extends Command
{
    protected $signature = 'custom:command';

    protected $description = 'test cron job to update status on table order';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $id = 1;
        DB::table('orders')
          ->where('id', $id)
          ->update(['status' => 2, 'canceled_at' => date("Y-m-d H:i:s")]);
    }
}

我运行php artisan list来查看我的cron作业

找到我的cron作业(自定义:命令)后,我就像这样运行我的cron作业:php artisan custom:command

它成功更新状态= 2.之后我再次手动更改状态变为1,然后我等待一分钟,它不会再次更新状态

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您还应该在本地Web服务器上设置cron以运行cron作业。

答案 1 :(得分:0)

如何手动更改状态? 你在数据库中更改它? 也许cron正在运行,但数据库中的“id”等于'2',这也就是你没有看到任何变化的原因!

如果您想找一个更好的方法来检查Cron作业是否正常工作

只需添加将发送到日志文件的日志

 public function handle()
{
    Log::info('Cron job working'); // you can also print variables
    $id = 1;
    DB::table('orders')
      ->where('id', $id)
      ->update(['status' => 2, 'canceled_at' => date("Y-m-d H:i:s")]);
}

不要忘记记录到您的来源:

namespace App\Console\Commands;

use Illuminate\Console\Command;
use DB;
use Log; // Here

class CustomCommand extends Command