Запуск PHP из командной строки - PullRequest
7 голосов
/ 13 апреля 2011

Я пытаюсь управлять очередью файлов, ожидающих обработки ffmpeg.Страница запускается с использованием CRON, который проходит через базу данных файлов, ожидающих обработки.Затем страница строит команды и отправляет их в командную строку, используя exec().

Однако, когда страница PHP запускается из командной строки или CRON, она запускает exec() OK, но невернитесь на страницу PHP, чтобы продолжить обновление базы данных и других функций.

Пример:

<?php
$cmd = "ffmpeg inpupt.mpg output.m4v";

exec($cmd . ' 2>&1', $output, $return);

//Page continues...but not executed
$update = mysql_query("UPDATE.....");
?>

Когда эта страница запускается из командной строки, команда запускается с использованием exec(), нотогда остальная часть страницы не выполняется.Я думаю, что проблема может быть в том, что я запускаю команду, используя exec() на странице, запускаемой из командной строки.

Можно ли запустить страницу PHP полностью из командной строки, которая включаетexec()?

Или есть ли лучший способ сделать это?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

Я написал статью о Запуск фонового процесса из PHP в Linux некоторое время назад:

<?php system( 'sh test.sh >/dev/null &' ); ?>

Обратите внимание на оператор & в конце. Это запускает процесс, который немедленно возвращает управление оболочке и продолжает работать в фоновом режиме.

Больше примеров:

<!--
    saving standard output to a file
    very important when your process runs in background
    as this is the only way the process can error/success
-->
<?php system( 'sh test.sh >test-out.txt &' ); ?>
<!--
    saving standard output and standard error to files
    same as above, most programs log errors to standard error hence its better to capture both
-->
<?php system( 'sh test.sh >test-out.txt 2>test-err.txt &' ); ?>
2 голосов
/ 13 апреля 2011

Вы пробовали использовать CURL вместо этого?

1 голос
/ 13 апреля 2011

Не уверен, но, вероятно, это из-за ограничений оболочки процессов cron, если он работает как веб-страница, затем используйте его как веб-страницу, настройте задание cron, которое вызывает wget wherever_your_page_is, и оно будет вызываться через ваш веб-сервер и должноподражайте вашим тестам.

...