Laravel Scheduling呼叫控制器

时间:2016-03-16 14:14:46

标签: php laravel laravel-5 cron taskscheduler

我使用Laravel任务计划,但是当我从控制器调用某个方法时遇到问题。

protected function schedule(Schedule $schedule)
{
    $schedule->call('UserController@deleteInactiveUsers')->everyMinute();
    //$schedule->call('App\Http\Controllers\UserController@deleteInactiveUsers')->everyMinute();
}

当我使用未注释的行调用时,我收到此错误:

[ReflectionException]
Class RecurrenceInvoiceController does not exist

然后我插入完全限定的命名空间路径,然后我收到此错误:

[PDOException] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

并且

[ErrorException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known 

问题出在哪里?从Laravel任务调度中调用Controller的方法是正确的。

5 个答案:

答案 0 :(得分:15)

几个月前我遇到了同样的问题,直到我能解决它。 我使用laravel 5.2并且内核以这种方式调用我的驱动程序:

$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();

我希望这能帮助别人;)

答案 1 :(得分:2)

直接将其放在kernel.php文件的schedule函数中

$ schedule-> call('App \ Http \ Controllers \ YourController @ function')-> everyMinute();

这将每分钟运行一次

注意:

在localhost中,您必须手动运行它,但在服务器上,应在cronjob中尝试此命令,这将在每分钟后自动调用控制器函数

php -d register_argc_argv =在/ home / iflasity / public_html / foldername / artisan schedule:run> / dev / null 2>&1

cd / home / iflasity / public_html / foldername && php artisan schedule:运行/ dev / null 2>&1

答案 2 :(得分:1)

对我来说,第一个错误看起来需要运行composer update,然后composer dump-autoload

如果它有效,你也会得到第二个错误,2002错误意思是:

  

无法通过套接字连接到本地MySQL服务器“(参见(MySQL文档中的客户端错误代码和消息)。

您需要在.env文件中设置数据库配置

答案 3 :(得分:0)

现在我用更简单的功能测试在数据库中插入新货币。这是代码:

public function handle()
    {
        $currency                = new Currency();
        $currency->currency_name = 'EUR';
        $currency->save();

        $this->info('New currency is successfully generated!');
    }

此功能来自laravel/app/Console/Commands。我从Kernel > schedule()致电。不行。

当我向handle()函数插入简单的日志写入时,如:

File::put(base_path() . '/storage/logs/test_logs.txt', 'Test log ' . Carbon::now()->format('Y-m-d H:i:s') . PHP_EOL);
这是有效的。但是当我尝试从Models创建新对象并保存到db - >这不起作用。

答案 4 :(得分:0)

行。我解决了这个问题。问题出在Docker Cron容器上。 Cron容器没有与MySQL容器链接。 谢谢你的所有答案。