【发布时间】: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