【问题标题】:Libreoffice headless Process result is not returned, but waits for timeoutLibreoffice headless Process 结果没有返回,而是等待超时
【发布时间】:2016-06-26 13:27:52
【问题描述】:

我们现在使用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 服务器上进行完全相同的转换来调试它,一切都很好。还尝试转换大小文档,以查看或达到超时的页数。是否也直接在命令行上执行了命令,转换也可以并在几秒钟内完成。

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

进程\"/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并执行以下sn-p后,如果从PHP执行转换仍然挂起:

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

【问题讨论】:

    标签: php symfony libreoffice symfony-process


    【解决方案1】:

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

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

    putenv('HOME=/tmp');
    

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

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2018-07-28
      • 2017-06-02
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多