С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/12/12 в 11:49 |
На сервере генерируется список вида:
/usr/local/bin/ffmpeg -i /home/sites/.../file.mp4 (параметры ffmpeg) /home/sites/.../file.mp4
...
cp /home/sites/.../file2.mp4 /home/sites/.../file2.mp4
...
Под windows, на локальной машине, записывал в файл *.cmd. Запустил, выполняется.
Каким образом это сделать на сервере с помощью php?
Запуск в цикле с помощью exec() выдает через ~5 минут 504 Gateway Timeout или что-то похожее.
|
|
|
|
нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 26/12/12 в 11:56 |
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/12/12 в 12:00 |
Я тоже
Но для этого надо заходить на сервер и запускать этот скрипт. Хотелось бы чтобы задача выполнялась из браузера.
|
|
|
|
нет судьбы
С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204
|
Добавлено: 26/12/12 в 12:57 |
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 26/12/12 в 13:06 |
Судя по:
Defolt писал: | выдает через ~5 минут 504 Gateway Timeout или что-то похожее |
поставь в скрипте set_time_limit(0)
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 26/12/12 в 14:48 |
Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал
Последний раз редактировалось: Mika (26/12/12 в 14:49), всего редактировалось 1 раз
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 26/12/12 в 14:48 |
браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы).
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/12/12 в 15:34 |
Это для запуска команды. У меня запуск производится функцией exec(); Отличие shell_exec в выводе информации - массив или строка (если правильно нагуглил);
Код: | $command = "/usr/local/bin/ffmpeg -i /home/sites/.../file.mp4 (параметры ffmpeg) /home/sites/.../file.mp4"." 2>&1";
exec($command,$output,$status); |
gimcnuk писал: | поставь в скрипте set_time_limit(0) |
Не работает Поставил set_time_limit(0); Перед exec();
Mika писал: | Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал |
Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены.
grozny писал: | браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы). |
Как это сделать, можно похожий пример? В какую сторону "копать".
Можно ли так сделать: после отправки списка на выполнение, через время захожу на страницу, а она мне выдает готово или нет?
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 26/12/12 в 15:40 |
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 26/12/12 в 16:01 |
Defolt писал: | Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены. |
Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а.
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/12/12 в 17:06 |
Спасибо, помогло. В конечном итоге браузер вывел данные, а не 504 ошибку.
Mika писал: | Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а. |
2>&1 выдаст ошибку в переменную $status.
& - задача будет выполнена в фоне и не выдаст результатов.
Объясни плиз для тех кто в танке, а то не догоняю что к чему и как будет работать
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 26/12/12 в 17:58 |
Defolt писал: | 2>&1 выдаст ошибку в переменную $status. |
Инструкция "2>&1" означает перенаправление потока stderr в поток stdout. А переменная $status, согласно мануалу по exec "будет содержать статус завершения внешней программы".
Defolt писал: | & - задача будет выполнена в фоне и не выдаст результатов. |
А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее.
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/12/12 в 18:10 |
Mika писал: | А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее. |
Теперь ясно для чего нужен &.
Спасибо всем ответившим. Вопрос решен, главный результат достигнут - работает
|
|
|
|