PHP5, Shell_exec ожидает завершения порожденных задач оболочки Linux

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

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

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

В 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. Или вы можете проверить этот. По сути, вы используете нативный форк для того, чтобы форкнуть длительный процесс, так что вашему php-интерфейсу не нужно ждать.
  2. Если вы чувствуете себя авантюрным, вы можете поместить свою «работу» (ваш запрос в этот длительный процесс) в БД. Затем задание cron проверяет базу данных на наличие входящих запросов, и именно она выполняет этот процесс.
  3. Другой метод заключается в использовании спасательное, но не беспокойтесь об этом.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]