Как я могу сохранить ресурс процесса из proc_open для проверки статуса позже?

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

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

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

Тип ресурса - "процесс", я использовал эту функцию http://php.net/get_resource_type для его получения.

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам