15

我使用 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 任务调度中调用控制器的方法是正确的。

4

5 回答 5

40

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

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

我希望这对其他人有帮助;)

于 2016-05-17T14:11:21.457 回答
3

直接把这个放到schedule函数里面kernel.php

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

这将在每分钟后运行。

笔记:

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

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

cd /home/iflasity/public_html/foldername && php artisan schedule:run /dev/null 2>&1 
于 2019-10-14T07:10:25.007 回答
1

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

于 2016-03-18T13:52:22.490 回答
1

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

如果它有效,您还会收到第二个错误,2002 错误含义是:

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

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

于 2016-03-16T14:35:52.940 回答
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 -> 这不起作用。

于 2016-03-17T09:24:35.717 回答