2016-03-11 6 views
3

Мы используем libreoffice --headless какое-то время, сначала через Debian, и за последние месяцы мы перешли на CentOS. Мы используем команду Symfony Process для преобразования docx в pdf, упрощенная команда выглядит следующим образом:Libreoffice headless Результат процесса не возвращается, но ждет тайм-аута

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

Процесс Symfony, который выполняет вышеупомянутую команду довольно прямо вперед:

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

Все работает хорошо, но с тех пор, как через пару дней преобразование больше не завершено, и процесс выйдет до тех пор, пока не будет достигнут 60-секундный тайм-аут.

Отлаживали это, делая то же самое преобразование на нашем сервере DEV, где все в порядке. Также попытался преобразовать малые и большие документы, увидеть или количество страниц для достижения таймаута. Также выполнил команду в командной строке напрямую, где конверсия также в порядке и заканчивается в течение нескольких секунд.

Исключение улавливается нашим приложением, и отправляется к регистратору:

Процесс \ "/ USR/бен/LibreOffice --headless --nologo --nofirststartwizard --norestore --convert -to pdf: writer_web_pdf_Export --outdir/home/conversionoutdir /home/conversionindir/4f00ac05aee274967b.docx \ "превысил таймаут 60 секунд.

Похоже, что PHP больше не может отслеживать процесс. Что здесь может быть? Какие-нибудь подсказки о том, как отлаживать это дальше?

Edit: после абстрагируясь от компонента процесса Symfony, устанавливая conversionoutdir разрешения на 777 и выполнив следующий фрагмент кода, преобразование по-прежнему сохраняет подвешивания, если выполняется из PHP:

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

ответ

3

Найдено решение для этого проблема, как-то переменная linux HOME была изменена на /root, и libreoffice не смог выполнить преобразование в этот путь. Возможно, это как-то изменилось при перезапуске Apache.

решение, чтобы всегда позволить PHP установить /tmp как HOME переменной:

putenv('HOME=/tmp'); 

Следующие посты предоставляют больше информации: