首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 8如何使用调度:测试

Laravel 8如何使用调度:测试
EN

Stack Overflow用户
提问于 2021-06-16 16:50:09
回答 2查看 425关注 0票数 1

我有一个关于命令schedule:listschedule:test的问题,在我的linux服务器上,我创建了三个不同的作业,它们简单地调用一个命令。现在使用schedule:list,我看到了以下内容:

代码语言:javascript
复制
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 |
+---------+---------------+----------------------+---------------------+

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

代码语言:javascript
复制
php artisan schedule:test
Which command would you like to run?:
  [0]
  [1]
  [2]
 >

如果我按enter键,第一个命令会被执行,没有任何问题,但我不知道如何启动第二个或第三个命令,我尝试放入1[1]App\Jobs\deleteItemsdeleteItems,但没有成功。

这是职务代码:

代码语言:javascript
复制
<?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]);
    }
}

有没有办法解决这个问题?

提前感谢罗伊

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-01 23:01:32

TLDR:更新到>= 8.52.0

--

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

我暂时解决了这个问题,方法是在控制台内核中设置调度作业的命令。我还没来得及提交bug报告。当我这样做时,我会在这里链接到它/更新我的答案。

例如,在您的示例中,只需在创建作业后设置command属性。

代码语言:javascript
复制
    $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中发布

票数 1
EN

Stack Overflow用户

发布于 2021-07-01 23:06:28

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

我一直在使用以下代码通过queues进行调度

代码语言:javascript
复制
    $schedule->command("queue:work")->everyMinute()
               ->withoutOverlapping()->emailOutputOnFailure('cool@bananas.com');
    
 // restart the queue worker periodically to prevent memory issues
$schedule->command('queue:restart')->hourly();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67999337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档