dmitrydeco
@dmitrydeco

Почему останавливается скрипт с использованием exec?

Привет. Схема следующая: основной сервер отсылает медиа-файл с помощью rsync на другой сервер. На этом сервере есть скрипт, который обрабатывает медиа-файл, вызывая через exec команду ffmpeg с некоторыми параметрами, после чего отправляет данные через gearman обратно (говоря о том, что задача выполнена), а так же команду на скачивание этого самого файла со второго на основной. Проблема в том, что через несколько таких последовательных итераций (обрабатывает 5-10 файлов) скрипт заканчивает свою работу на функции exec (ставил обычные echo перед и после exec), не выдавая никаких ошибок (error_reporting и тд включены), причём иногда останавливая конвертацию на середине. Пробовал отслеживать память скрипта - всё в норме. В логах supervisor'а, в логах самого скрипта и gearman'а ничего нет. Куда копать?

P.S.
echo 1;
exec("ffmpeg -y -i $filepath -vf scale={$scale},setsar=1:1 -vcodec libx264 -b:v {$px['b']}k -acodec copy -threads ".(exec('nproc') - 1)." -bufsize 2000k -minrate 0k -maxrate 1450k ".$new_filepath, $output, $result_int);
echo 2;

Обрывается после вывода "1";
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 4
BojackHorseman
@BojackHorseman
...в творческом отпуске...
чудес не бывает.

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

или оно там еще висит и выполняется
Ответ написан
@grinat
Сделай через proc open и лови вcе шо творится. В ffmpeg проставь loglevel на максимум, вероятно exit code > 0
Ответ написан
@magarif
Программист
Ни строчки кода)

Вот эту страничку прочитайте, пункты "Замечания", возможно что-то подойдет)
php.net/manual/ru/function.exec.php

Ну и смотрите что возвращает третий параметр $return_var
string exec ( string $command [, array &$output [, int &$return_var ]] )
Ответ написан
alekciy
@alekciy
Вёбных дел мастер
А что дает непосредственный запуск этой команды в консоле? Т.е. берем, тест команды выносим в переменную и логируем. Упавшие варианты запускаем руками.
$cmd = "ffmpeg -y -i $filepath -vf scale={$scale},setsar=1:1 -vcodec libx264 -b:v {$px['b']}k -acodec copy -threads ".(exec('nproc') - 1)." -bufsize 2000k -minrate 0k -maxrate 1450k " . $new_filepath;
echo $cmd;
exec($cmd, $output, $result_int);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
WebMoney Москва
от 110 000 руб.
COSMOS Москва
от 120 000 до 150 000 руб.
Skyeng Москва
До 200 000 руб.
20 янв. 2019, в 00:12
16000 руб./за проект
19 янв. 2019, в 23:33
110000 руб./за проект