PHP5, Shell_exec изчаква да завършат създадените задачи на Linux shell

Опитвам се да стартирам Linux shell скрипт от PHP5, който ще работи 24 часа, но искам уеб страницата да се върне след секунди. Мислех, че това може да бъде решено чрез създаване на скрипт, създаващ задачата, но изглежда не работи.

От няколко дни търся решение или опция „един изстрел/стреляй и забравяй“ без никакъв успех.

Следващият пример показва проблема.

В PHP 5 правя едно от следните извиквания (изпробвах много в този момент)

passthru("dummy_script.sh");

or

system("dummy_script.sh");

or

shell_exec("dummy_script.sh");

Фиктивният скрипт изглежда по следния начин:

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

Виждам, че този процес започва, но уеб страницата не се връща, преди да направя „killall dummy_script.sh“. Ако стартирам скрипта ръчно в терминал, той се връща незабавно и създава цикъла.

Някой знае ли начин тук, по който мога да създам задачата, без да карам уеб страницата да чака?

Надявам се, че можете да ми помогнете, ще бъда много благодарен.


person Dan Damgaard Levsen    schedule 06.02.2015    source източник


Отговори (1)


За да отговоря на въпроса ви:

  1. Може да започнете да разглеждате pcntl_fork. Или можете да проверите това. По принцип вие използвате собствения fork, за да разклоните дълготрайния процес, така че вашият php интерфейс не трябва да чака.
  2. Ако се чувствате приключенски настроени, можете да поставите вашата "работа" (вашата заявка към този дълъг процес) в DB. След това cron задача проверява DB за входящи заявки и тя е тази, която изпълнява този процес.
  3. Друг метод е да използвате resque, но не се притеснявайте на този етап.
person Kyle Domingo    schedule 06.02.2015
comment
Благодаря за бързия отговор. Това е възможно решение и засега е добре. Но нямам намерение да хабя никакви ресурси в изчакване процесът да завърши. Няма ли опции за изпращане на командата без изчакване да приключи? (опция „стреляй и забравяй“) - person Dan Damgaard Levsen; 06.02.2015