关于路由或控制器中执行 Artisan 命令

打扰各位了,请教一个问题,按照文档所说的,在路由或控制器中执行Artisan命令,返回500错误,是什么原因呢?
代码如下:

    Route::get('/config-cache', function() {
        $exitCode = Artisan::call('config:cache');
        return 'Config cache cleared';
    });

以上代码是文档中复制过来的。是还需要做其它的操作吗?

补充访问此路由返回信息如下图:

关于路由或控制器中执行 Artisan 命令

apache 日志出现如下提示:
[core:error] [pid 4292:tid 2208] [client 127.0.0.1:51132] End of script output before headers: index.php

原因找到了:
业务需要,在 App\Console\Kernel.php 中 schedule方法添加了一个 Artisan 任务调度。再使用 Artisan::call 的时候,也会调用 Kernel.php 中的 schedule 方法,不知为何执行这个方法会导致 500 错误;schedule 中代码如下:

    protected function schedule(Schedule $schedule)
    {
        $filepath = storage_path('logs/schedule');
        \File::isDirectory($filepath) or \File::makeDirectory($filepath, 0777, true, true);
        $schedule->command('command:lost_daka')->everyMinute()->appendOutputTo($filepath.'/data_'.date('YmdH').'.log')->runInBackground();
    }

注释掉 schedule 中添加的任务调度代码,再Artisan::call 则一切正常。请问一下各位,这样做是不对么?都是跟着文档上的来做的啊?

longren610
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

请确保是在 routes/web.php 下,我复制你的代码可以运行,可以把你的报错信息贴出来。

4年前 评论
longren610 (楼主) 4年前

500 错,可能也有成千上万种情况,,,你这跟问别人:我生病了,要怎么办?一样,,,没有任意意义啊,,,

4年前 评论
longren610 (楼主) 4年前
largezhou (作者) 4年前
longren610 (楼主) 4年前
longren610

@orh 请问一下,你复制过去,在web.php里面有做什么操作么?比如use某些类之类的。

4年前 评论

看看 Laravel 的日志呢

4年前 评论
longren610 (楼主) 4年前

第一、请确保你的路由能请求的到
第二、请确保你引入了门面下的Artisan,use Illuminate\Support\Facades\Artisan;

4年前 评论
longren610

@犯二青年 感谢回答。路由确实是能访问到的,只要把 $exitCode = Artisan::call('config:cache'); 注释掉,是能打印出后面的return 消息的。感觉就是Artisan调用的时候程序崩了。 引入 use Illuminate\Support\Facades\Artisan; 也没用,同样的返回500. :sweat_smile:

4年前 评论
犯二青年 4年前
longren610 (作者) (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!