Есть у меня задача сделать в админке кнопку, при нажатии на которую запускается большой тяжёлый процесс и продолжает работать в фоне, а пользователь продолжает пользоваться админкой.
Проблема заключается в том, что известные мне способы дёрганья других скриптов из PHP (EXEC, CURL и т.п.) ждут, пока запрошенный скрипт отработает, ну или таймаут истечёт.
Также это приводит к тому, что на время выполнения тяжёлого процесса админка зависает, т.к. происходит блокировка сессии пользователя, даже если какой-нибудь nginx уже вернул 504 gateway time-out.
Вопрос:
Как правильно запускать другие процессы из PHP и не дожидаться завершения их выполнения?
Подскажите подход/функцию/команду.
Проблема заключается в том, что известные мне способы дёрганья других скриптов из PHP (EXEC, CURL и т.п.) ждут, пока запрошенный скрипт отработает, ну или таймаут истечёт.
exec или shell_exec ($comand. '> /dev/null 2>/dev/null &');
"правильно" из веб процесса не вызывать тяжелый процесс напрямую, а сделать отдельный процесс, который получает сообщения из веб процесса и выполняет тяжелые обработки - например форкает свою копию которая начинает обработку, а сам продолжает слушать новые команды.