Laravel 调度呼叫控制器

问题描述 投票:0回答:5

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

php laravel laravel-5 cron scheduled-tasks
5个回答
41
投票

我使用 Laravel 5.2,内核以这种方式调用我的驱动程序:

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

3
投票

直接将其放入

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 

1
投票

对我来说,第一个错误看起来需要运行

composer update
,然后运行
composer dump-autoload

如果成功的话你还会得到第二个错误,2002错误的含义是:

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

您需要在

.env
文件中设置数据库配置


1
投票

问题出在 Docker Cron 容器上。 Cron 容器未与 MySQL 容器链接。


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
创建新对象并保存到数据库时 -> 这不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.