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

0

Я пытаюсь запустить сценарий оболочки 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". Если я запускаю скрипт вручную в терминале, он немедленно возвращается и порождает цикл.

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

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

Теги:
multithreading
sh

1 ответ

0
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню