Laravel 8使用方法schedule:test
Laravel 8 how to use schedule:test
我对命令 schedule:list
和 schedule: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();
我对命令 schedule:list
和 schedule: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();