Вопрос

Я заинтересован в начале процессов после веб -запроса или, возможно, подкрасной к новому процессу после завершения начального потока.

Я бы предпочел не использовать Cron, из -за характера заданий, которые я буду выполнять, и как часто их нужно запускать, ожидание минуты, чтобы обновить, не вариант.

Я рассматриваю несколько способов сделать это:

1) Вызов страницы в JavaScript, которая начинает процесс и немедленно возвращается, затем выполняет задачи после, например, ajax ('/run_jobs.php? Job = 123') .... вы поняли идею

2) подтягивание нового потока после завершения потока; т.е. output_page (); новый поток(); run_job (123); выход();

У любого есть какие -либо идеи по теме или имеют опыт работы с этим.

Это было полезно?

Решение

Ну, это зависит от работы, которую вы хотите запустить. Еще одним сложным, но более масштабируемым и контролируемым подходом является использование Gearman для запуска и управления заданиями. Приятно то, что вы можете распространять задания на другие поля, чтобы ваш веб -сервер не получил полную загрузку.

Легкий подход - это использование EXEC и nohup как в

<?php
exec("nohup /usr/bin/php script.php >/dev/null 2>/dev/null &");
?>

Важной частью, которая должна отсоединить выходные каналы от процесса PHP. Для чтения результата процесса вы можете хранить его в базе данных.

Другие советы

В наши дни стандартным способом обработки такого рода является система очерков обмена сообщениями. В конце вашего запроса вы отправите сообщение в очередь. Затем есть какой -то внешний процесс запуска (например, несколько кронштейнов), который постоянно читает сообщения обратно из очереди и запускает задания, которые необходимо выполнить

Zend Queue это популярный выбор для PHP.

Что касается предлагаемых вами решений, вы не можете быть уверены, что запрос AJAX закончится (HTTP не дает никаких гарантий о успехе или неудаче запроса), поэтому, если вы полагаясь на работе. Я видел это как бы работа, но это не лучший выбор. Сокращение процесса в конце вашего запроса будет кошмаром производительности.

Я не проверил это, но вот идея.

Используя curl, асинхронно отправьте запрос на newprocess.php (или везде, где находится ваш новый скрипт процесса.) Вы можете посмотреть на функцию curl_post_async at At Как сделать асинхронный запрос GET в PHP? о том, как сделать такой запрос.

Возможно, вы захотите сделать некоторую аутентификацию, чтобы убедиться, что только вы можете запустить newprocess.php ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top