【问题标题】:Laravel Job throwing Symfony\Component\Process\Exception\ProcessTimedOutExceptionLaravel 作业抛出 Symfony\Component\Process\Exception\ProcessTimedOutException
【发布时间】:2023-03-09 17:26:01
【问题描述】:

我有一个 Web 应用程序,它运行一个使用 aminyazdanpanah/php-ffmpeg-video-streaming 包将视频转换为 HLS 的作业。但是,大约 2 分钟后,作业失败并抛出错误:

Symfony\Component\Process\Exception\ProcessTimedOutException: The process '/usr/bin/ffmpeg -y -i...'
exceeded the timeout of 300 seconds. in /var/www/vendor/symfony/process/Process.php:1206

Laravel 作业的超时设置为 7200 秒。 我的主管设置还指定了 7200 秒的超时时间:

[program:app_worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work --tries=1 --timeout=7200 --memory=2000
autostart=true
autorestart=true

我还在 ini 文件中将我的 php max_execution_time 设置为 7200s。 在工作handle()函数中我也调用set_time_limit(7200);来设置时间限制。

我已重新启动队列工作程序并清除了我的缓存,但这似乎并没有解决问题。

看来 Symfony 只是忽略了 Laravel 的超时规范。

【问题讨论】:

    标签: php laravel laravel-8 symfony-process


    【解决方案1】:

    我注意到它在大约 2 分钟后失败了,因为在我的 config/queue.php 文件中,redis retry_after 设置为 90。

     'redis' => [
                'driver' => 'redis',
                'connection' => 'default',
                'queue' => env('REDIS_QUEUE', 'default'),
                'retry_after' => 90,
                'block_for' => null,
                'after_commit' => false,
            ],
    

    我将其增加到 3600,因此作业在 2 分钟后停止失败,但在 300 秒后继续失败。

    我后来追查到超时来自aminyazdanpanah/php-ffmpeg-video-streamingFFmpeg::create()。 默认情况下,该函数将超时设置为300s。所以我不得不将配置传递给函数以增加超时:

    use Streaming\FFMpeg;
    
    $ffmpeg =  FFMpeg::create([
                'timeout'          => 3600,
            ]);
    

    这解决了超时问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 2020-06-22
      • 2019-07-01
      • 2018-09-06
      • 1970-01-01
      • 2019-01-06
      • 2015-03-14
      • 2019-03-01
      相关资源
      最近更新 更多