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

Rva*_*aak 4 php symfony libreoffice symfony-process

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

libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \
    /home/conversionindir/4f00ac05aee274967b.docx
Run Code Online (Sandbox Code Playgroud)

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

    $process = new Process($cmd);
    $process->mustRun();
Run Code Online (Sandbox Code Playgroud)

一切都工作正常,但几天后转换不再完成,该过程将一直等待,直到达到 60 秒超时。

一直在通过在我们的服务器上执行完全相同的转换来调试此问题DEV,一切都很好。还尝试转换小文档和大文档,以查看页数对于达到超时的影响。还直接在命令行上执行命令,转换也可以,并在几秒钟内完成。

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

进程 \"/usr/bin/libreoffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir /home/conversionoutdir /home/conversionindir/4f00ac05aee274967b.docx\" 超出超时60 秒。

看来 PHP 无法再跟踪进程了。这里可能发生了什么?关于如何进一步调试这个的任何线索?

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

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

Rva*_*aak 6

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

解决方案是始终让 PHP 设置/tmpHOME变量:

putenv('HOME=/tmp');
Run Code Online (Sandbox Code Playgroud)

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