PHP: Hintergrundprozess

 


knorri
Stammgast

05.07.10
21:49 Uhr
Salut. Ich möchte folgendes: Ein Script soll am besten jederzeit im Hintergrund laufen und Thumbnails von Bildern erzeugen, wenn keine vorhanden sind.

Ich fand folgende Methode:
  1. exec('nohup nice php5 -f check_test.php > log.txt 2>&1 &');
Quelltext in Zwischenablage kopieren

Ich teste das gerade mit einem kleinen Testscript, das mir etwas berechnet und eine Mail sendet, wenn alles gut lief. Das Ergebnis wird per echo ausgegeben.

Wenn ich das Kommando von oben per ssh starte wird mir wunderbar was ins log geschrieben. wenn Ich allerdings in einer php-datei obiges exeknuten will bekomme ich nur:
  1. X-Powered-By: PHP/5.2.11
  2.  
  3. Content-type: text/html
Quelltext in Zwischenablage kopieren

Was will man mir damit sagen? Ich stehe auf dem Schlauch, wäre schön, wüsste da jemand weiter.

Ich bin auch für andere Lösungen offen, im Endeffekt soll mit so wenig wie möglich Useraufwand jederzeit überprüft werden, ob alle Thumbnails da sind und wenn nicht erzeugt.

Cronjobs sind keine Lösung, da maximal einmal am Tag ausführbar.
Link zu diesem Beitrag in die Zwischenablage kopieren
Patric
Veteran

05.07.10
22:18 Uhr
Irrelevanter Beitrag (anzeigen):

Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

05.07.10
22:23 Uhr
dein provider lässt nur 1x cronjobs am tag zu? es gibt auch externe cronjob dienste und solche scripts die mit exec auf systemebene arbeiten sind gelinde gesagt auch nicht unbedingt die sichersten (vor allem wenn sie von der root ausgeführt werden.

ok aber zum problem:
dass er dir nix ins log schreibt ist auch klar. wenn du es manuell per ssh ausführst, führst du es mit deinem user aus, aus dem verzeichnis, in dem du dich befindest. wenn du es automatisiert ausführst, wird es vom webserver user ausgeführt und immer aus dem home verzeichnis des users. also: pfade absolut setzen /usr/local/webapps/mysite/chceck_test.php > /pfad/zur/log.txt und alle bilder ebenfalls absolut setzen.

trotzdem nicht schön und sicher. genau dazu sind cronjobs ja da, in regelmäßigen abständen was auszuführen - upgrade lieber dein paket, dass du crons flexibel einsetzen kannst. (5 minuten rythmus würde ja reichen)

anderer weg wäre (aber das frisst speicher ohne ende) ein script construkt zu bauen, was immer XX minuten sleept und dann per xml/rpc oder json/rpc einen zweiten thread aufmacht, der das resizing übernimmt.

aber auch unschön. in deinem fall würde ich das echt mit normalen website aufrufen koppeln. pro site pi wird nachgeschaut, wann zuletzt ein thumb lookup gestartet wurde - ist er lange genug her, wird mittels xml/rpc json/rpc in einem separaten (vom user unabhänigen thread) die bildmanipulation vorgenommen.
Link zu diesem Beitrag in die Zwischenablage kopieren
Toadward
Veteran

05.07.10
22:23 Uhr
normalerweise haben php skripte doch eine laufzeitenbegrenzung vom hoster
Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

05.07.10
22:26 Uhr
jau haben sie - gehen aber mitunter im php script oder in der .htaccess ausser kraft zu setzen. genauso wie du den speicher bei den meisten hostern auch nachträglich höher zuweisen kannst.
Link zu diesem Beitrag in die Zwischenablage kopieren
knorri
Stammgast

05.07.10
22:35 Uhr
stese schrieb am 05.07.10, 22:23 Uhr:

dass er dir nix ins log schreibt ist auch klar. wenn du es manuell per ssh ausführst, führst du es mit deinem user aus, aus dem verzeichnis, in dem du dich befindest. wenn du es automatisiert ausführst, wird es vom webserver user ausgeführt und immer aus dem home verzeichnis des users. also: pfade absolut setzen /usr/local/webapps/mysite/chceck_test.php > /pfad/zur/log.txt und alle bilder ebenfalls absolut setzen.

daran liegt es nicht. hab es auch mit absolutem pfad getestet (zur .php-datei), gleiches resultat. und auch die log.txt wurde aktualisiert trotz fehlender pfade, sagt das datum der letzten änderung im ftp-programm.

exec('whoami') gibt mir interessanter weise auch meinen ssh-nutzernamen aus, keine ahnung wie das normal auszusehen hat, aber erscheint mir nicht ganz so logisch, aber das nur nebenbei

das hostingpaket ist nicht meins, ich kann da nicht viel ändern. ist auch bei keinem größeren provider.

normaler website aufruf wird schwierig, weil das ganze unter flash läuft und nur die daten über php aus der datenbank geholt werden. das admininterface ist ansonsten noch in html, aber da hält man sich nicht lange genug auf, dass „normale“ seitenaufrufe ausreichen um alle größen zu erzeugen.

man könnte halt gucken, ob man beim aufrufen der schnittstelle was erzeugen kann, aber finde ich unsauber und unschön...
Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

05.07.10
22:45 Uhr
normaler website aufruf wird schwierig, weil das ganze unter flash läuft und nur die daten über php aus der datenbank geholt werden. das admininterface ist ansonsten noch in html, aber da hält man sich nicht lange genug auf, dass „normale“ seitenaufrufe ausreichen um alle größen zu erzeugen.

das is jetzt quark. die flash seite benötigt auch einen container aus html/php und wie ich bereits sagte: das entkoppelt man, indem man nur bei aufruf der containerseite des flashs einen externen call startet, das ein separates script aufruft. die einfachste variante ist mit curl, das man asynchron nur anstoßen kann, und dann gar nicht auf ne response wartet. der benutzer kann von mir aus schon wieder von der seite weg sein und der thread rödelt im hintergrund immer noch. z.b. hier beschrieben
Link zu diesem Beitrag in die Zwischenablage kopieren
knorri
Stammgast

05.07.10
22:51 Uhr
danke, das gucke ich mir mal an!

(trotzdem wüsste ich gerne wo mein fehler bei der exec-sache ist)
Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

05.07.10
23:21 Uhr
kann ich dir auf anhieb nicht sagen. ich vermute du wirst fündig, wenn du ins php error log des webservers schaust. da wirds in der regel erklärt.
Link zu diesem Beitrag in die Zwischenablage kopieren
knorri
Stammgast

06.07.10
13:05 Uhr
okay, dank steses link läufts jetzt einigermaßen )

(der server hat übrigens error log off. sehr gut, mir jetzt egal. honks)
Link zu diesem Beitrag in die Zwischenablage kopieren
 
#