问题描述
添加onFailure回调时,带有调用方法的Task Scheduler总是失败
基本测试:
// Console\Kernel.PHP
$schedule->call(function () {
var_dump('test');
})
->onFailure(function () {
var_dump('Failed');
})
->everyMinute();
我在某处错了或缺少了什么?
预先感谢
解决方法
更新:我提交了一个PR来解决Laravel框架中的问题,并且它刚刚被合并。看来这可以在Laravel 8中使用(我认为应该在下周发布)。
https://github.com/laravel/framework/pull/33914
成功/失败挂钩似乎不适用于闭包。
通过查看源代码,Laravel似乎依赖出口代码来确定计划任务是否成功:
https://github.com/laravel/framework/blob/7.x/src/Illuminate/Console/Scheduling/Event.php#L787
您可以在此处看到它正在寻找0以外的退出代码。
问题是,仅在通过外部过程调用计划的命令时设置退出代码:
https://github.com/laravel/framework/blob/7.x/src/Illuminate/Console/Scheduling/Event.php#L222
对于关闭(回调)任务,不会更新退出代码:
这意味着退出代码仍为null
(不为0),并且评估为失败。
这可能是Laravel团队会考虑为将来的版本进行改进的内容。同时,如果您编写传统的artisan command并通过调度程序运行它,您应该会发现成功/失败钩子按预期工作。