【问题标题】:Invalid argument supplied for foreach() in Laravel Schedular JobLaravel 调度程序作业中为 foreach() 提供的参数无效
【发布时间】:2020-01-10 22:09:05
【问题描述】:

我正在与SchedularLaravel 5.8 合作。在设置了CommandsCommand Kernal 之后,我得到了错误,

在 /home/SERVER_USER_NAME/public_html/vendor/symfony/console/Input/ArgvInput.php:261 处为 foreach() 提供的参数无效)

这里是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 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}
"}

注意:在Kernal.php 中安排的Commands 在我从终端与artisan 一起使用时运行正常,因此命令没有问题。

【问题讨论】:

    标签: laravel foreach cron scheduler invalidargumentexception


    【解决方案1】:

    尝试将 cron 命令设置为这样

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

    【讨论】:

    • 它已经添加为cron(根据文档中给出的)。在另一个项目中,同样的过程效果很好。
    【解决方案2】:

    尝试使用 -d 标志将 register_argc_argv (ini config var) 设置为 1

    php -d register_argc_argv=1 artisan schedule:run >> /dev/null 2>&1
    

    【讨论】:

      【解决方案3】:
      * * * * * cd /path-to-your-project && php -d register_argc_argv=1 artisan schedule:run >> /dev/null 2>&1
      

      还使用

      在 /path-to-your-project 中创建 php.ini 文件
      register_argc_argv = On
      

      【讨论】:

      • 它适用于 php cli 版本,无需在 php.ini 中使用 register_argc_argv 标志
      【解决方案4】:

      在您的项目根目录中创建一个 php.ini 文件

      例如:/public_html/myproject

      在您已经创建的php.ini 文件中添加register_argc_argv = On

      就是这样

      【讨论】:

        【解决方案5】:

        这个 command 行对我有用,希望对您有所帮助。

        /usr/local/bin/php ~/public_html/artisan reminder:users >> /dev/null 2>&1
        

        【讨论】:

          猜你喜欢
          • 2018-12-09
          • 1970-01-01
          • 2015-06-29
          • 2017-02-15
          • 2017-05-03
          • 1970-01-01
          • 1970-01-01
          • 2022-01-27
          • 2018-02-26
          相关资源
          最近更新 更多