2015-02-06 2 views
0

Я пытаюсь запустить сценарий оболочки Linux из PHP5, который будет работать в течение 24 часов, но я хочу, чтобы веб-страница возвращалась в течение нескольких секунд. Я, хотя это можно было бы решить, создав скрипт для нереста задачи, но он, похоже, не работает.PHP5, Shell_exec, ожидающий завершения заданий оболочки linux

Я искал вариант решения или вариант «один выстрел/огонь и забыть» в течение нескольких дней без везения.

В следующем примере показана проблема.

В PHP 5 я сделать один из следующего вызова (пробовал много он этот пункт)

passthru("dummy_script.sh"); 

или

system("dummy_script.sh"); 

или

shell_exec("dummy_script.sh"); 

Фиктивная сценарий выглядеть следующие:

#!/bin/sh 
{ 
    while true        
    do 
    sleep 1 
    done 
} & 

Я вижу, что процесс начинается, но веб-страница не возвращается, прежде чем я создам «killall dummy_script.sh». Если я запускаю скрипт вручную в терминале, он немедленно возвращается и порождает цикл.

Кто-нибудь знает дорогу здесь, я могу создать задачу, не заставляя веб-страницу ждать ее?

Надеюсь, вы, ребята, можете мне помочь, это было бы очень признательно.

ответ

0

Чтобы ответить на ваш вопрос:

  1. Вы можете начать смотреть на pcntl_fork. Или вы можете проверить this. В основном, вы используете встроенную fork для развития долгого процесса, поэтому ваш php-интерфейс не должен ждать.
  2. Если вы чувствуете себя предприимчивым, вы можете поместить свою «работу» (ваш запрос на этот длительный процесс) в БД. Затем задание cron проверяет БД для входящих запросов, и это тот, который выполняет этот процесс.
  3. Другим методом является использование resque, но в данный момент не беспокойтесь.
+0

Спасибо за быстрый ответ. Это возможное решение, и теперь все в порядке. Но я не намерен таскать любые ресурсы, ожидая завершения процесса. Нет ли вариантов отправки команды, не дожидаясь ее завершения? (опция «огонь и забыть») –

Смежные вопросы