gpt4 book ai didi

node.js - 在 Google Cloud 上使用 FFMPEG 运行后台进程运行在中间停止

转载 作者:行者123 更新时间:2023-12-04 22:54:25 30 4
gpt4 key购买 nike

我有一个外部 bash 脚本,它使用 FFmpeg 对音频文件进行转码,然后将文件上传到谷歌云存储。我正在为这个过程使用谷歌云运行平台,但是这个过程在中间停止并且没有从日志中得到任何线索。我正在使用 node js spawn 命令来执行 bash 脚本

    const createHLSVOD = spawn('/bin/bash', [script, file.path, file.destination, contentId, EPPO_MUSIC_HSL_URL, 'Content', speed]);
createHLSVOD.stdout.on('data', d => console.log(`stdout info: ${d}`));
createHLSVOD.stderr.on('data', d => console.log(`stderr error: ${d}`));
createHLSVOD.on('error', d => console.log(`error: ${d}`));
createHLSVOD.on('close', code => console.log(`child process ended with code ${code}`));
在云上运行开始过程本身需要很多时间,但在我的本地机器上转码和上传非常快。一段时间后,转码日志被停止,没有新的日志出现。我不知道发生了什么
Google Cloud run logs
那么这里发生了什么?为什么它首先非常慢以及为什么进程在中间停止而没有任何错误
node js script
Transcoding script
Dockerfile

最佳答案

spawn 的问题是您创建了一个在后台运行的异步进程。这是一个问题,因为 Cloud Run 仅在处理请求时才允许 CPU 使用容器。在你的情况下,你有那个

  • 一个请求到达
  • 创建了一个 spawn
  • 生成的脚本在后台运行

  • 在请求中发送 HTTP 应答。 Cloud Run 会限制 CPU
  • 您生成的脚本继续运行


  • 有2个后果
  • 您的脚本处理非常长,因为节流将 CPU 限制在 5% 以下
  • 经过一段时间的事件(即实例收到的请求)后,Cloud Run 将未使用的实例杀死到其一侧的相同资源。大约15分钟,但可能会发生变化,是谷歌云内部酱

  • 我建议您等待生成的脚本结束或使用同步调用;如 execSync , 而不是异步 spawn .

    关于node.js - 在 Google Cloud 上使用 FFMPEG 运行后台进程运行在中间停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68102462/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com