Wie kann ich eine Prozessressource speichern von proc_open, um später den Status zu überprüfen?

StackOverflow https://stackoverflow.com/questions/949437

Frage

Ich bin mit einem sh Skript , die ein läuft Java Prozess durch PHP auf ubuntu Server. Ich verwende proc_open für den Prozess ausgeführt wird. in der Regel die Workflow-geht so:

  • fordern Sie eine Seite ->
  • Skript ausgeführt wird (bis es fertig ist) ->
  • Ergebnisseite.

In meinem Fall das Skript parallel läuft, damit der Server wird nicht warten, bis das Skript beendet ist (es dauert manchmal Stunden, so kann es nicht), also muß ich irgendwie diese Ressource speichern, ihn folgen später (Status der Prozess oder das Stoppen sie gerade).

Der Ressourcentyp ist "Prozess", habe ich diese Funktion get_resource_type für sie zu bekommen.

Serialize wird nicht in diesem Fall arbeiten - Ressource eine außergewöhnliche denn es ist (Sie unter http://il2.php.net/manual/en/function.serialize.php innerhalb der Parameter-Box).

Mein Ziel ist ein guter Prozess Handling. Weiß jemand, wie kann ich die Ressource oder andere Art und Weise verwenden Sie für die Abwicklung von Prozessen tun würde.

War es hilfreich?

Lösung

Sie können keine Ressourcentypen für die spätere Verwendung in PHP speichern. Was Sie tun müssen, ist eine Form der asynchronen Kommunikation implementieren - vielleicht eine Datei, wo ein Statusinformationen und der andere liest, einen gemeinsam genutzten Speicher, eine Named Pipe, ...

schreibt

Ich würde schauen in die pcntl Erweiterung . Hinweis:. Forking ist nicht möglich, in einer Web-Server-Umgebung aus Sicherheitsgründen

Andere Tipps

  

In meinem Fall das Skript parallel läuft, damit der Server wird nicht warten, bis das Skript beendet ist (es dauert Stunden, manchmal so kann es nicht) ..

Das sollte kein Problem allein sein. Sie können ganz einfach einen lange laufen php-Prozess haben, solange es nicht von einem Web-Server initiiert wird. Wenn Sie den Prozess von einer Web-Anwendung initiieren müssen, würde ich vorschlagen, dass Sie einen Eintrag einfügen in einer Datenbanktabelle, und dann einen cronjob habe ein Skript ausführen, die diese Warteschlange überprüft und die Verarbeitung tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top