PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   Off Topic Area (http://www.selfphp.de/forum/forumdisplay.php?f=15)
-   -   Hintergrundprozesse aus PHP heraus starten (http://www.selfphp.de/forum/showthread.php?t=12432)

c4 03.02.2006 14:05:51

Hintergrundprozesse aus PHP heraus starten
 
Moin,

mein Job-Service soll mehrere Importe starten, abhängig von der Uhrzeit und der Anzahl Standorte. Wie immer: bis hier her kein Problem.

Das Problem ist, dass der Import im Hintergrund laufen muss, da dieser mehrere Stunden dauern kann.
Ich will also z.B. 3 Importe starten, die dann 3 Minuten, 20 Minuten und 2 Stunden laufen. Das aufrufende Skripte hat sich nach dem Starten der Importe natürlich beendet.
Das ist die Theorie.

Die Praxis ist, dass ich einen Import starte, das aufrufende Skript sich beendet und den Import mit in den Tod zieht.

Hoffe, das war verständlich.

Meine Versuche:
exec(wget http://... &)
--> wartet auf Ende von wget

exec((wget http://...) &)
--> wartet auf Ende von wget

exec(wget --background http://...)
--> wird mit Ende des aufrufenden Skriptes beendet

Die oberen 3 Versuche auch mit "sh" davor, gleiches Resultat.

script.sh: startet wget (alle Varianten mit & und --background versucht)
exec(script.sh http://... &)
--> siehe oben

Ich glaube, ich bin alle Varianten durch, nix klappt.

Wie lautet die Lösung?
Hat PHP was zu bieten? Ich habe nichts gefunden.
Kann man einem Prozess sagen, dass er nicht das Child von PHP sein soll? Sicher nicht, wäre ja wie ein offenes Scheunentor.

Danke
Carsten

feuervogel 03.02.2006 19:37:43

AW: Hintergrundprozesse aus PHP heraus starten
 
ich weiß, es klingt blöd, aber wäre sleep() ne möglichkeit?

c4 03.02.2006 19:45:17

AW: Hintergrundprozesse aus PHP heraus starten
 
Zitat:

Zitat von feuervogel
ich weiß, es klingt blöd, aber wäre sleep() ne möglichkeit?

Nein. Einerseits soll sich das aufrufende Skript ja nach dem Start der Importe beenden und andererseits weiß ich ja nicht, wie lange ein Import laufen wird.

meikel (†) 03.02.2006 21:10:44

AW: Hintergrundprozesse aus PHP heraus starten
 
Zitat:

Zitat von c4
Wie lautet die Lösung?

Crontab, CLI Shellscript und Semaphorfile.

Das Webfrontend erstellt ein Semaphorfile.
crontab startet ein CLI Script, welches das/die Semaphorfiles abfragt, das/die Files löscht und die entsprechenden Aktionen startet. Ist kein File da, wird die Aktion beendet.

c4 09.02.2006 09:35:02

AW: Hintergrundprozesse aus PHP heraus starten
 
Man könnte auch die Process Control Functions von PHP nutzen, aber mit Cron, sh und awk geht's doch schneller.

R. Woitaschik 10.02.2006 11:33:12

AW: Hintergrundprozesse aus PHP heraus starten
 
Hi c4,
deine Version "exec((wget http://...) &)" ist schon OK. Du mußt nur die Ausgabe des wget in eine Datei umleiten. Ansonsten versucht wget auf Standard-Out (d.h. Console) zu schreiben, diese gibt es aber nicht mehr, da dein Initial-Skript bereits beendet ist.

z.B.
Code:

exec('wget "http://..." >/dev/null &2>/dev/null &');
sollte genau das bringen, was Du willst.

Gruß
Richard

c4 10.02.2006 13:16:51

AW: Hintergrundprozesse aus PHP heraus starten
 
Schöne Idee, klappt aber auch nicht.
Mache ich es mit & am Ende, dann zeigt er mir die Website komplett an, wartet aber trotzdem bis zum Ende des Imports.
Versuche ich es zusätzlich noch mit dem Parameter --background geht alles flotter. Aber nur, weil der Import abgebrochen wird.

Kurzum: nix sich geändert hat.

marco001 06.12.2006 15:36:19

AW: Hintergrundprozesse aus PHP heraus starten
 
das is die lösung für windows für Linux einfach einen cron starten:

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("test2.cmd", 0, false);

andere Möglichkeiten unter:

http://www.somacon.com/p395.php

Domi 15.12.2009 11:21:21

AW: Hintergrundprozesse aus PHP heraus starten
 
ich pushe das mal wieder aus der ganz alten Vergangenheit raus ... hat schon jemand eine Lösung? (Debian)

Interessant wäre ja auch herauszufinden ob ein Prozess dann eben im BG läuft, oder ihn sogar zu killen!

DokuLeseHemmung 15.12.2009 11:48:59

AW: Hintergrundprozesse aus PHP heraus starten
 
Debian?
Das folgende gilt für SuSE.
Sollte aber in Debian nix anders sein.

Ich starte sowas (ewig lange MySQL Dumps und Restore) über den xinetd der kennt das Laufzeit Problem nicht. Semaphore nicht vergessen.
Auch lassen sich so Daemon start/stop Scripte aufrufen, welche Prozesse in den Hintergrund schicken.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:44:40 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.