php - Laravel 作业抛出 Symfony\Component\Process\Exception\ProcessTimedOutException

标签 php laravel laravel-8 symfony-process

我有一个 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 的超时规范。

最佳答案

我注意到它在大约 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-streaming FFmpeg::create()。 默认情况下,该函数将超时设置为 300s。所以我必须将配置传递给函数以增加超时时间:

use Streaming\FFMpeg;

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

这解决了超时问题。

关于php - Laravel 作业抛出 Symfony\Component\Process\Exception\ProcessTimedOutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70320689/

相关文章:

laravel - Composer 错误在 Windows 10 中安装 laravel/installer

php - 比较 Laravel Eloquent Result 并获取日期

php - 登录成功后magento 404

Laravel 家园 : 403 forbidden on nginx

php - Laravel 保护表单隐藏字段和 url

mysql - 如何编写数据库查询来获取 laravel-8 中列值为 1 的所有记录?

php - 为自定义验证规则命名 - Laravel 8

php - 如何将 Keycloak 设置为 humhub 的身份验证提供程序

php - 如何在 MYSQL 中为订阅模型创建规则?

php - 在 Laravel 关系中显示一对一关系的 VIEW