首页 > 解决方案 > 如何使用 php artisan 执行 cron-job 命令?

问题描述

我对 php artisan cron 有一些问题。

目前,任务在 App\Console\Commands\task1.php 中
,而 cron 在 App\Console\Kernel.php 中定义

问题是:任务没有启动。

所以我尝试使用命令行创建一个新任务: php path/to/artisan make:command task2

并创建了一个文件,但在 App\Commands 而不是 App\Console\Commands 中。

当尝试使用 列出现有的 cron 任务时artisan list,我只得到:
vendor:publish Publish any publishable assets from vendor packages

我应该把我的命令放在哪里?
内核文件应该在哪里?

目前,Kernel.php 是:

<?php namespace App\Console;

use App\Commands\Task2;
use App\Console\Commands\Task1;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel {

    protected $commands = [
        Task1::class,
        Task2::class,
    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('task1')->daily();
        $schedule->command(Task2::class)->daily();
    }

}

Task1,使用命令行创建的,在 App\Commands 文件夹中:

<?php namespace App\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\SelfHandling;

class Task1 extends Command implements SelfHandling {

    protected $name = 'task1';

    protected $description = 'Task1 test ';

    public function handle()
    {}
}

任务 2,在 App\Console\Commands 文件夹中:

<?php namespace App\Console\Commands;

use Illuminate\Console\Command;

class Task2 extends Command {

    protected $name = 'task2';

    protected $description = 'task 2 test';

    public function handle()
    {}
}

标签: phplaravelcronlaravel-artisan

解决方案


你需要$signature而不是$name

<?php namespace App\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Bus\SelfHandling;

class Task1 extends Command implements SelfHandling {

    protected $signature = 'task1';

    protected $description = 'Task1 test ';

    public function handle()
    {}
}

推荐阅读