Мне нужно запустить сервер OpenOffice в фоновом режиме (если это не instanciate), то сделать конвертацию файлов с JODConverter.
Сценарий выглядит следующим образом:Базовый фоновый процесс, инициируемый PHP, не работает
- Пользователь вводит * .html файл по форме.
- Я получаю файл переменной $ _FILES в скрипте PHP, соответствующем действию формы
- Я запускаю скрипт bash с помощью shell_exec и передаю ему путь temp, чтобы получить доступ к файлу в моем сценарии bash, затем сделать Перекодировка
Это PHP код:
$fichier = $_FILES['html_file'];
if($fichier) {
if(is_uploaded_file($fichier['tmp_name'])) {
if(move_uploaded_file($fichier['tmp_name'],"/var/www/test/doc/".$fichier['name'])) {
$output = shell_exec("./converter {$fichier['name']}");
echo $output;
}
}
}
сценарий "преобразователь" код:
#!/bin/bash
fichier=$1
pid=$$
echo RUNNING sOFFICE :
SERVICE=soffice
if P=$(pgrep $SERVICE)
then
echo sOFFICE IS ALREADY RUNNING
else
echo sOFFICE WILL BE START WAIT 5s PLEASE
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
sleep 5
fi
echo CONVERSION START
java -jar ./jodconverter/lib/jodconverter-cli-2.2.2.jar ./$1 ./$1.odt
echo CONVERSION END
Моя проблема заключается в первой части сценария bash, когда я пытаюсь запустить сервер sOFFICE в фоновом режиме, эта команда блокирует окончательное выполнение скрипта, даже с использованием &
.
Я пытался запустить этот скрипт с помощью терминала, и он отлично работает.
Так что я думаю, проблема связана с выполнением php скрипта bash. Есть идея ?
EDIT:
Решение найдено благодаря ответ Джим Рубинштейн:
перенаправлять стандартный вывод и стандартная ошибка ручьи
: Заменить
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
по
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard > /dev/null 2> /dev/null &