如何解决Laravel Task Scheduler总是失败
添加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并通过调度程序运行它,您应该会发现成功/失败钩子按预期工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。