关于路由或控制器中执行 Artisan 命令
打扰各位了,请教一个问题,按照文档所说的,在路由或控制器中执行Artisan命令,返回500错误,是什么原因呢?
代码如下:
Route::get('/config-cache', function() {
$exitCode = Artisan::call('config:cache');
return 'Config cache cleared';
});
以上代码是文档中复制过来的。是还需要做其它的操作吗?
补充访问此路由返回信息如下图:

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 则一切正常。请问一下各位,这样做是不对么?都是跟着文档上的来做的啊?
关于 LearnKu
请确保是在
routes/web.php下,我复制你的代码可以运行,可以把你的报错信息贴出来。500 错,可能也有成千上万种情况,,,你这跟问别人:我生病了,要怎么办?一样,,,没有任意意义啊,,,
@orh 请问一下,你复制过去,在web.php里面有做什么操作么?比如use某些类之类的。
看看 Laravel 的日志呢
第一、请确保你的路由能请求的到
第二、请确保你引入了门面下的Artisan,use Illuminate\Support\Facades\Artisan;
@犯二青年 感谢回答。路由确实是能访问到的,只要把 $exitCode = Artisan::call('config:cache'); 注释掉,是能打印出后面的return 消息的。感觉就是Artisan调用的时候程序崩了。 引入 use Illuminate\Support\Facades\Artisan; 也没用,同样的返回500. :sweat_smile: