Laravel 8使用方法schedule:test

Laravel 8 how to use schedule:test

我对命令 schedule:listschedule:test 有疑问,在我的 linux 服务器上,我创建了 3 个不同的作业,它们可以简单地调用一个命令。现在使用 schedule:list 我看到了这个:

php artisan schedule:list
+---------+---------------+----------------------+---------------------+
| Command | Interval      | Description          | Next Due            |
+---------+---------------+----------------------+---------------------+
|         | 32 8-20 * * * | App\Jobs\importItems | 2021-06-16 11:32:00 |
|         | 0 8 * * *     | App\Jobs\deleteItems | 2021-06-17 08:00:00 |
|         | 0 22 * * *    | App\Jobs\removeItems | 2021-06-16 22:00:00 |
+---------+---------------+----------------------+---------------------+

这是正确的,所以我尝试使用测试手动 运行 作业:

php artisan schedule:test
Which command would you like to run?:
  [0]
  [1]
  [2]
 >

如果我按回车键,第一个执行没有任何问题,但我不知道如何启动第二个或第三个,我尝试输入 1[1]App\Jobs\deleteItems, deleteItems 但没有成功。

这是职位代码:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Console\Command\startImport;

class importItems implements ShouldQueue, ShouldBeUnique
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */

    public function __construct()
    {
set_time_limit(80);
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Log::info("Cron is working fine!");
        \Artisan::call('start:import', ['limit'=>50]);
    }
}

知道如何解决这个问题吗?

提前致谢 罗伊

TLDR:更新至 >= 8.52.0

--

我认为这是 Laravel 的错误,因为它为日程表创建回调事件的方式。它“命名”事件但设置描述。理想情况下,它也会为您设置命令。

我通过在控制台内核中为计划作业设置命令暂时解决了这个问题。我还没来得及提交错误报告呢。当我这样做时,我会 link 给它 here/update 我的答案。

例如,在您的情况下,您只需在创建作业后设置 command 属性。

    $importItems = $schedule->job(importItems::class)->dailyAt('01:00');
    $importItems->command = 'importItems';

设置 属性 后,在使用 artisan:test 时按 0 或 1 等即可。

更新

这已在 https://github.com/laravel/framework/pull/38146

中修复

并于 2021-07-27 v8.52.0 发布

我认为起点是弄清楚您是否真的正确设置了它。正如其他人所说,您应该有一个非空的命令列。从我的服务器中查看以下图片。除了 运行ning 常规功能外,我还 运行ning 排队,因为我不能 运行 supervisor 因为在共享主机上。

我一直在使用下面的代码来安排 queues

    $schedule->command("queue:work")->everyMinute()
               ->withoutOverlapping()->emailOutputOnFailure('cool@bananas.com');
    
 // restart the queue worker periodically to prevent memory issues
$schedule->command('queue:restart')->hourly();