关于路由或控制器中执行 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 则一切正常。请问一下各位,这样做是不对么?都是跟着文档上的来做的啊?
推荐文章: