Как я могу сохранить ресурс процесса из proc_open для проверки статуса позже? - PullRequest
1 голос
/ 04 июня 2009

Я запускаю скрипт sh , который запускает процесс java через php на сервере Ubuntu . Я использую proc_open для запуска процесса. обычно рабочий процесс выглядит так:

  • запросить страницу ->
  • скрипт запускается (пока не закончится) ->
  • страница результатов.

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

Тип ресурса - «процесс», я использовал эту функцию get_resource_type для его получения.

Serialize не будет работать в этом случае - ресурс является исключительным для него (вы можете посмотреть http://il2.php.net/manual/en/function.serialize.php внутри поля Параметры).

Моя цель - хорошая обработка процесса. Кто-нибудь знает, как я могу использовать ресурс или другой способ, которым вы будете использовать для обработки процессов.

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Нельзя хранить типы ресурсов для последующего использования в PHP. Что вам нужно сделать, это реализовать некоторую форму асинхронного взаимодействия - может быть, файл, где один записывает информацию о состоянии, а другой читает, общую память, именованный канал, ...

Я бы посмотрел на расширение pcntl . Подсказка: в целях безопасности раскладка невозможна из среды веб-сервера.

0 голосов
/ 04 июня 2009

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

Это не должно быть проблемой само по себе. Вы можете легко запустить длительный php-процесс, если он не запущен с веб-сервера. Если вам нужно запустить процесс из веб-приложения, я бы посоветовал вам вставить запись в таблицу базы данных, а затем попросить cronjob запустить скрипт, который проверяет эту очередь и выполняет обработку.

...