Libreoffice headless Process 结果不返回,而是等待超时

Libreoffice headless Process result is not returned, but waits for timeout

我们现在使用 libreoffice --headless 有一段时间了,首先是通过 Debian,在过去的几个月里我们切换到 CentOS。我们正在使用 Symfony Process 命令将 docx 转换为 pdf,简化的命令如下所示:

libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \
    /home/conversionindir/4f00ac05aee274967b.docx

执行上述命令的 Symfony 进程非常简单:

    $process = new Process($cmd);
    $process->mustRun();

一切正常,但几天后转换不再完成,该过程将停止,直到达到 60 秒超时。

通过在我们的 DEV 服务器上进行完全相同的转换来对此进行调试,一切正常。还尝试转换小型和大型文档,以查看或达到超时的页数。也直接在命令行上执行命令,转换也可以,几秒钟内完成。

异常被我们的应用程序捕获,并发送到记录器:

The process \"/usr/bin/libreoffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir /home/conversionoutdir /home/conversionindir/4f00ac05aee274967b.docx\" exceeded the timeout of 60 seconds.

似乎 PHP 无法再跟踪进程了。这里会发生什么?关于如何进一步调试的任何线索?

编辑: 在抽象出 Symfony 进程组件后,将 conversionoutdir 权限设置为 777 并执行以下代码片段,如果从 PHP:

$output = array();
exec('libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \
    /home/conversionindir/4f00ac05aee274967b.docx', $output);
print_r($output);

找到了这个问题的解决方案,不知何故 linux 的 HOME 变量被更改为 /root 而 libreoffice 无法转换到该路径。也许这在重新启动 Apache 时以某种方式改变了。

解决方案是始终让 PHP 将 /tmp 设置为 HOME 变量:

putenv('HOME=/tmp');

以下帖子提供了更多信息: