opencpu - 当我使用 wait=FALSE 调用 system() 时进程终止
问题描述
我正在尝试在 OpenCPU 上处理视频,因为它们非常大,我想使用“系统”调用“FFmpeg”进程并让它继续工作直到完成。但我需要获取 OpenCPU 创建的临时“文件目录”,以便我可以拉该目录,直到视频转换完成。为此,我使用参数 wait=FALSE 调用系统函数,如下所示
如果我在我的机器上使用库(opencpu),这可以正常工作,但是当我将它移到生产环境(Ubuntu 14.x)中时,系统调用在启动后会被中断。
这是可以使用 opencpu.confg 修复的吗?或者它是一个错误?
ffmpeg_exe <- "/usr/bin/ffmpeg" # Linux path
exec_convert <- paste0("( ",ffmpeg_exe,' -i ',input_file,' ',convert_command,' ',output_file, ' 2> PROCESS_OUTPUT.txt ; ls > PROCESS_DONE.txt ',")")
system(exec_convert, wait=FALSE)
解决方案
我刚刚发现在 linux 上,OpenCPU 不允许这种行为,它会在请求返回时杀死所有子进程。这是故意的。它不希望孤儿进程可能永远在服务器上运行,opencpu 不是为此目的而设计的。
推荐阅读
- c# - ASP.NET Core 3.1 中的默认页面
- javascript - 更改 src 后如何使视频重新加载?
- typescript - 如何获取从类实例克隆的对象的类型?
- uwp - UWP:需要在文本框单击时禁用屏幕键盘
- java - 用Java中的参数覆盖抽象父级中的方法
- neo4j - Neo4j,后续 MATCH 路径查询
- asp.net-web-api - .NET Core Web API 中后控制器模型中未提供的属性的块设置默认值
- git - git 忽略所有文件,除了一个类型的文件,期望忽略一个类型的文件,通过更新现有 repo 中的 .gitignore
- mysql - MySQL 将 ISO 日期转换为日期时间
- sql - 在 BigQuery 中更新 Firebase 事件表中的数据