laravel - 在 Laravel Scheduler 作业中为 foreach() 提供的参数无效

标签 laravel foreach cron scheduler invalidargumentexception

我正在 Laravel 5.8 中使用 Schedular。设置 CommandsCommand Kernal 后,我收到的错误为,

Invalid argument supplied for foreach() at /home/SERVER_USER_NAME/public_html/vendor/symfony/console/Input/ArgvInput.php:261)

这是Kernal 方法,

protected $commands = [
    Commands\OfferMonitor::class,
    Commands\RankingCommand::class,
    Commands\CreditCycle::class,
];

protected function schedule(Schedule $schedule)
{
    $schedule->command('KG:OfferMonitor')->dailyAt('01:00');
    $schedule->command('KG:UpdateRanks')->everyTenMinutes();
    $schedule->command('KG:CreditCycle')->dailyAt('00:00');
}

这是我在生产服务器上运行的 Laravel Cron JobCron Job

我认为 cron 作业本身会引发错误,我使用的是 php 二进制文件而不是 php-cli。是否导致错误?如果是,这个问题的解决方法是什么?

这是来自 Laravel 的完整错误日志和堆栈跟踪,

Invalid argument supplied for foreach() {"exception":"[object] (ErrorException(code: 0): Invalid argument supplied for foreach() at /home/SERVER_USER_NAME/public_html/vendor/symfony/console/Input/ArgvInput.php:261)
[stacktrace]
#0 /home/SERVER_USER_NAME/public_html/vendor/symfony/console/Input/ArgvInput.php(261): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'Invalid argumen...', '/home/SERVER_USER_NAME...', 261, Array)
#1 /home/SERVER_USER_NAME/public_html/vendor/symfony/console/Application.php(970): Symfony\\Component\\Console\\Input\\ArgvInput->getFirstArgument()
#2 /home/SERVER_USER_NAME/public_html/vendor/laravel/framework/src/Illuminate/Console/Application.php(81): Symfony\\Component\\Console\\Application->getCommandName(Object(Symfony\\Component\\Console\\Input\\ArgvInput))
#3 /home/SERVER_USER_NAME/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(133): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#4 /home/SERVER_USER_NAME/public_html/artisan(36): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#5 {main}
"}

Note: The Commands scheduled in Kernal.php is running properly when I use them with artisan from terminal, so there is no issue about command.

最佳答案

尝试将 cron 命令设置为这样

/usr/local/bin/php register_argc_argv=1 artisan schedule:run >> /dev/null 2>&1

关于laravel - 在 Laravel Scheduler 作业中为 foreach() 提供的参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848968/

相关文章:

java 。如何使用 forEach 检查元素是否已成功添加到集合和跟踪索引中?

javascript - 当 JavaScript 中的 forEach 或循环提供值时,条件执行

php - PHP 持续检查数据库更改的最佳做法是什么?

php - Laravel 过滤器嵌套关系

javascript - Laravel Echo 不使用 Auth header

mysql - 如何获取不在表 “ids” 中的 “service_gos” (Laravel)

Python、Beautiful Soup 和 cron

php - Laravel Eloquent : merge model with Input

php - 如何检查变量是否为数组?...或类似数组的东西

cron - logrotate 是否依赖于 cron?