【问题标题】:Dispatching a Laravel job in scheduler, pre-5.5在调度器中调度 Laravel 作业,pre-5.5
【发布时间】:2019-04-04 18:53:04
【问题描述】:

我已经习惯了 Laravel 5.5+,您可以在其中调用 $schedule->job(new ExampleJob); 来解雇工作,这在 5.4 中是不可用的。我正在尝试做这样的事情:

$schedule->call(function () {
    dispatch(new AppointmentReminder);
})->dailyAt('08:00');

但工作没有被解雇。我已经确认这是在正确的时间被调用的。我猜dispatch() 方法在App\Console\Kernal.php 中不可用?有谁知道在 5.4 的调度程序中调度作业的官方方式?这是一个遗留代码库,所有作业都内联在 Kernal.php 中,这完全是一团糟。更不用说这是一项相当复杂的工作。

我确实尝试了use Illuminate\Foundation\Bus\DispatchesJobs;/use DispatchesJobs;,然后在Kernal.php 中尝试了$this->dispatch(new AppointmentReminder());,但这似乎也没有奏效。此外,(new AppointmentReminder())->dispatch(); 不起作用。谢谢!

【问题讨论】:

  • 你的 crontab 中有这个吗? * * * * * php /path/artisan schedule:run >> /dev/null 2>&1
  • 它正在运行。我通过一个 Log::info();在回调中,在 Job 本身中。调度程序日志触发,但我还没有开始工作。
  • 另外,我可以通过 tinker 手动触发作业,这样看起来还不错。无论如何,即使存在一些逻辑问题,handle() 方法中的日志也会触发。所以我的问题似乎真的是从调度程序调度作业。
  • 我当前(非理想)的解决方法:$schedule->call(function () { $appointmentReminder = new AppointmentReminder(); $appointmentReminder->handle(); })->dailyAt(' 08:00');

标签: php laravel laravel-5 cron laravel-5.4


【解决方案1】:

您可以创建一个新的控制台命令:

php artisan make:command CommandName

将其添加到 App\Console\Kernal.php:

protected $commands = [
Commands\CommandName::class,      
];

并让你按时调用它:

$schedule->command('CommandName')->dailyAt('08:00');

在“handle”函数的命令中,调度作业。

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2020-01-16
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多