exec() system() System-Crash, need help
exec() system() System-Crash, need help
hallo,
welche möglichen gründe könnte es geben warum exec() system() zu einem üblen crash führen?
ich möchte über exec() eine andere php-datei starten.
der befehl:
/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/script.php
hierbei handelt es sich um einen 1&1 managed-server.
safe_mode=off
wenn ich die befehlzeile über einen crontab ausführen lasse, klappt alles.
nur bei exec() system() etc... krachts im gebälk.
würd mich freuen wenn da jemand weiterhelfen könnte :)
welche möglichen gründe könnte es geben warum exec() system() zu einem üblen crash führen?
ich möchte über exec() eine andere php-datei starten.
der befehl:
/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/script.php
hierbei handelt es sich um einen 1&1 managed-server.
safe_mode=off
wenn ich die befehlzeile über einen crontab ausführen lasse, klappt alles.
nur bei exec() system() etc... krachts im gebälk.
würd mich freuen wenn da jemand weiterhelfen könnte :)
-
darkspirit
- Posts: 553
- Joined: 2002-10-05 16:39
- Location: D'dorf
- Contact:
Re: exec() system() System-Crash, need help
Definiere "Crash". Was passiert genau?
Re: exec() system() System-Crash, need help
... hmmm ....
wenn ich das initiierende script, also mit der exec(), bleibt der bildschirm weiß, für lange zeit, bis die 500'er meldung kommt.
mit viel zeit und glück komme ich über ssh an den server, und ps -x zeigt mir 100 - 200 aktive script.php.
wenn ich die pid der unzähligen script.php-prozesse ansehe, muß es sich um eine schleife handeln, den die pid's ändern sich fortlaufend.
so nach einer dreiviertelstunde hat sich der server wieder 'eingekriegt', d.h. der fehler ist weg.
allerdings ist kein ergebnis von der script.php zu sehen.
die script.php funktioniert jedoch, wenn ich sie direkt über meinen browser aufrufe.
wenn ich das initiierende script, also mit der exec(), bleibt der bildschirm weiß, für lange zeit, bis die 500'er meldung kommt.
mit viel zeit und glück komme ich über ssh an den server, und ps -x zeigt mir 100 - 200 aktive script.php.
wenn ich die pid der unzähligen script.php-prozesse ansehe, muß es sich um eine schleife handeln, den die pid's ändern sich fortlaufend.
so nach einer dreiviertelstunde hat sich der server wieder 'eingekriegt', d.h. der fehler ist weg.
allerdings ist kein ergebnis von der script.php zu sehen.
die script.php funktioniert jedoch, wenn ich sie direkt über meinen browser aufrufe.
Re: exec() system() System-Crash, need help
Vielleicht solltest du das dann auch tun.->X³<- wrote: die script.php funktioniert jedoch, wenn ich sie direkt über meinen browser aufrufe.
Re: exec() system() System-Crash, need help
Nein,
script.php soll von einer anderen php-datei mit exec() gestartet werden...
script.php soll von einer anderen php-datei mit exec() gestartet werden...
-
darkspirit
- Posts: 553
- Joined: 2002-10-05 16:39
- Location: D'dorf
- Contact:
Re: exec() system() System-Crash, need help
Erklär doch mal, warum du das brauchst.. vielleicht können wir dir einen besseren Weg vorschlagen ;)
Re: exec() system() System-Crash, need help
das geht jetzt am thema vorbei ...
Re: exec() system() System-Crash, need help
Tolle Antwort auf ein Hilfeangebot eines Users.->X³<- wrote:das geht jetzt am thema vorbei ...
bye
arty
Re: exec() system() System-Crash, need help
produzierst du evtl eine Endlosschleife? rufst du das Script selbst wieder auf?
Re: exec() system() System-Crash, need help
das wird der fall sein :) zeig uns doch den quellcode mal (der datei, die die datei aufruft)theomega wrote:produzierst du evtl eine Endlosschleife? rufst du das Script selbst wieder auf?
Re: exec() system() System-Crash, need help
nein, eben nicht.
sobald exec() bearbeitet wird, hängt die sache.
@arty:
nicht falsch verstehen, doch mein hilferuf geht um exec(), nicht welche anderen wege es gibt. oder warum und wieso ich das brauche...
korregier mich wenn ich es falsch sehe.
sobald exec() bearbeitet wird, hängt die sache.
@arty:
nicht falsch verstehen, doch mein hilferuf geht um exec(), nicht welche anderen wege es gibt. oder warum und wieso ich das brauche...
korregier mich wenn ich es falsch sehe.
Re: exec() system() System-Crash, need help
Warum, wenns über http geht, dann ruf das Script doch per Curl oß auf.->X³<- wrote:Nein,
script.php soll von einer anderen php-datei mit exec() gestartet werden...
Re: exec() system() System-Crash, need help
über exec() soll das andere script unabhängig gestartet werden.
Mir würde es schon helfen, wenn jemand mal einen beipielbefehl für die exec() anhand der daten zu beginn des thread.... ;)
Mir würde es schon helfen, wenn jemand mal einen beipielbefehl für die exec() anhand der daten zu beginn des thread.... ;)
-
majortermi
- Userprojekt

- Posts: 916
- Joined: 2002-06-17 16:09
Re: exec() system() System-Crash, need help
Meinst du damit, dass dein aufrufendes Skript nach dem exec()-Befehl weitermacht, bevor der auszuführende Befehl beendet ist?->X³<- wrote:über exec() soll das andere script unabhängig gestartet werden
Dazu müsstest du sinnvollerweise erst ein fork() und dann eine exec() machen (und den Prozess dämonisieren), das geht mit PHP aber meines Wisssens nicht - ich würde dir daher empfehlen einfach einen kleinen Wrapper in C zu schreiben.
Erst nachlesen, dann nachdenken, dann nachfragen... :)
Warum man sich an diese Reihenfolge halten sollte...
Warum man sich an diese Reihenfolge halten sollte...
Re: exec() system() System-Crash, need help
exec() führt ein gegebenen Befehl aus, ohne eine Ausgabe zu erzeugen. Die Funktion gibt lediglich die letzte Zeile aus dem Befehlsergebnis zurück. Wenn Sie auf die direkte Rückgabe/ Ausgabe eines Befehls angewiesen sind, dann benutzen Sie stattdessen ....
for($x=0;$x<5;$x++)
{
exec(#Hier soll $x.php gestartet werden und die Schleife egal was passiert weiterlaufen#);
}
$x.php ruft über url eine externe datei auf.
--> dauerts mal extrem lange in $x.php oder sonstirgendwas stört, soll die schleife davon unberührt bleiben und fortgeführt werden.
Was ist eigentlich unter:
Die Funktion gibt lediglich die letzte Zeile aus dem Befehlsergebnis zurück
zu verstehen?
for($x=0;$x<5;$x++)
{
exec(#Hier soll $x.php gestartet werden und die Schleife egal was passiert weiterlaufen#);
}
$x.php ruft über url eine externe datei auf.
--> dauerts mal extrem lange in $x.php oder sonstirgendwas stört, soll die schleife davon unberührt bleiben und fortgeführt werden.
Was ist eigentlich unter:
Die Funktion gibt lediglich die letzte Zeile aus dem Befehlsergebnis zurück
zu verstehen?
-
fettehenne
- Posts: 62
- Joined: 2003-05-08 15:20
- Location: Hannover
Re: exec() system() System-Crash, need help
Meines Wissens nach kehrt ein erfolgreicher exec()-Aufruf niemals zurück da sich ja der eigene Prozess mit dem neuen überlagert. Und dadurch hast du ja schon deinen Unendlich-Mechanismus in deiner Schleife.
Oder? :?:
Oder? :?:
Re: exec() system() System-Crash, need help
PHP hat ein eigenes Process-Handling, sehr ähnlich dem von Linux. Man kann sich ganz einfach einen Child mit $childpid = pcntl_fork(); im parent machen. Allerdings benötigt exec() keinen eigenen Prozess. exec() macht automatisch einen neuen Process als Unterprozess von dem PHP Thread auf (dies ist aber KEIN Child !!!)MajorTermi wrote:Dazu müsstest du sinnvollerweise erst ein fork() und dann eine exec() machen (und den Prozess dämonisieren), das geht mit PHP aber meines Wisssens nicht
Und natürlich wird nach Abarbeitung von exec() wieder ins Main-Script zurückgegangen, exec() gibt die Ausgabe des anderen Prozesses als String zurück. Alternativen zu exec() gibt es eigentlich keine, höchstens noch system(), was aber sehr sehr ähnlich ist.
Re: exec() system() System-Crash, need help
Nochmal:Beachten Sie auch, dass wenn Sie ein Programm mit dieser Funktion starten und Sie es im Hintergrund laufen lassen möchten, Sie sicherstellen müssen, dass die Ausgabe des Programms in eine Datei oder anderenen Ausgabestream umgeleitet wird. Andernfalls wird PHP solange laufen, bis das Programm beendet ist.
So,In order to execute a command have have it not hang your php script while it runs, the program you run must not output back to php. To do this, redirect both stdout and stderr to /dev/null, then background it.
> /dev/null 2>&1 &
In order to execute a command and have it spawned off as another process that is not dependent on the apache thread to keep running (will not die if somebody cancels the page) run this:
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
die folgende Datei rufe ich im Browser auf.
Code: Select all
<?php
echo exec("/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/fp.php > /dev/null 2>&1");
$handle=@fopen(time()."_exec.txt","w");
fclose($handle);
echo "done ;)";
?>
Code: Select all
<?php
flush();
sleep(5);
$handle=@fopen(time()."_fp.txt","w");
fclose($handle);
?>
Bei Aufruf des ersten Scripts soll die fp.php unabhängig gestartet werden.
Es werden in beiden Datein zur Kontrolle timestamp-Dateien erstellt.
Wenn es glatt laufen würde, müßten die stamps ca. 5 Sek. auseinander liegen.
Was passiert?
Das erste Script schreibt 15 bis 20 mal (im Sekundentakt) seine stamp-Datei und das war's.
Mit > /dev/null 2>&1 wird doch der Prozess so gelagert, das das erste Script weiterläuft, ohne zu warten.
Warum funktioniert das nicht so? Steht's doch überall so geschrieben?
PS:
Dies sind nur Test-Scripte ;)
Re: exec() system() System-Crash, need help
Hmm ...
mit
exec("/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/fp.php > /dev/null 2>&1 &",$stdout, $stderr);
bin ich schonmal soweit, das das Browserfenster sofort "done ;)" schreibt.
D.h. das erste Script wird so wie es soll ohne Warten abgearbeitet.
Ein Fortschritt.
Nun ist es aber so, das jetzt fortlaufend pausenlos "stamp"_exec.txt Dateien geschrieben werden. Also jene die von ersten Script nur einmal geschrieben werden soll.
Von fp.php weit und breit nichts zu sehen...
Es ist mir ein Rätsel ... :(
mit
exec("/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/fp.php > /dev/null 2>&1 &",$stdout, $stderr);
bin ich schonmal soweit, das das Browserfenster sofort "done ;)" schreibt.
D.h. das erste Script wird so wie es soll ohne Warten abgearbeitet.
Ein Fortschritt.
Nun ist es aber so, das jetzt fortlaufend pausenlos "stamp"_exec.txt Dateien geschrieben werden. Also jene die von ersten Script nur einmal geschrieben werden soll.
Von fp.php weit und breit nichts zu sehen...
Es ist mir ein Rätsel ... :(
Re: exec() system() System-Crash, need help
Ich vermute, es ist irgendein Rechte-Problem...
datei.php
fp.php
EDIT: Ich hasse dieses Board :(
http://www.legendz.de/testperms.php
Das highlight_file(); exit; einfach rausnehmen vorher !
Edit2: Das ganze dann betrachten mit "Quelltext anzeigen"
Bitte sämtliche Ausgabe posten, und bitte keinesfalls irgendwas X`en, da wirklich alle Angaben wichtig sind !
datei.php
Code: Select all
<?php
exec("/usr/local/bin/php4 /kunden/homepages/xx/dxxxxxxxx/htdocs/fp.php",$fpout);
print_r($fpout);
$handle=@fopen(time()."_exec.txt","w");
fclose($handle);
echo "done ;)";
?>
EDIT: Ich hasse dieses Board :(
http://www.legendz.de/testperms.php
Das highlight_file(); exit; einfach rausnehmen vorher !
Edit2: Das ganze dann betrachten mit "Quelltext anzeigen"
Bitte sämtliche Ausgabe posten, und bitte keinesfalls irgendwas X`en, da wirklich alle Angaben wichtig sind !
Re: exec() system() System-Crash, need help
das vom ersten script geht nicht zu posten *lol*
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 1193164 bytes) in /var/webroot/rf/forum/includes/functions_post.php on line 103
werd das mal zippen
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 1193164 bytes) in /var/webroot/rf/forum/includes/functions_post.php on line 103
werd das mal zippen
Re: exec() system() System-Crash, need help
Woeher nimmst du das Fatal Error ?
zB diese function_post.php sollte doch eigentlich nirgends auftauchen. Die Ausgabe des ersten Scripts, also das print_r($fpout) sollte ca 10 Zeilen groß sein !
zB diese function_post.php sollte doch eigentlich nirgends auftauchen. Die Ausgabe des ersten Scripts, also das print_r($fpout) sollte ca 10 Zeilen groß sein !
Re: exec() system() System-Crash, need help
Das Fatal Error ist von diesem Forum ;)
http://217.160.135.179/exec.zip
http://217.160.135.179/exec.zip
Re: exec() system() System-Crash, need help
So wie das für mich aussieht, rufst du die gleiche Datei im Browser auf, die du auch mit exec() ausführen tust, warum auch immer.
Ich erkenne das daran, weil 1. die fp.php nicht die Ausgabe hat, die sie haben sollte, sondern fp.php hat die gleiche Ausgabe wie eigentlich datei.php haben müsste. Dh, entweder sind fp.php und datei.php identisch, oder du rufst von datei.php aus irgendeinem Grund nicht fp.php sondern nochmal datei.php auf. 2. würde das auch erklären, warum er in eine Endlos-Schleife "fällt", denn du hast die Ausgabe von datei.php ca 1000 mal, vermutlich bis zum Script-timeout. 3. erklärt das auch deine sekündlich angelegten stamp_files.
Ich erkenne das daran, weil 1. die fp.php nicht die Ausgabe hat, die sie haben sollte, sondern fp.php hat die gleiche Ausgabe wie eigentlich datei.php haben müsste. Dh, entweder sind fp.php und datei.php identisch, oder du rufst von datei.php aus irgendeinem Grund nicht fp.php sondern nochmal datei.php auf. 2. würde das auch erklären, warum er in eine Endlos-Schleife "fällt", denn du hast die Ausgabe von datei.php ca 1000 mal, vermutlich bis zum Script-timeout. 3. erklärt das auch deine sekündlich angelegten stamp_files.
Re: exec() system() System-Crash, need help
Nein,
im Browser rufe ich "datei.php" auf.
Die Datei hat exakt den von Dir geposteten Inhalt.
Quelltexte beider Dateien sind doch hier einzusehen.
Mich würde auch der Grund interessieren warum
das Script bei
$handle=@fopen(time()."_exec.txt","w");
sich aufhängt.
Ich habe schon duzende im www findbare Variantionen an UNIX/Shell-Befehlen für exec() ausprobiert.
Bei manchen wurde das exec.txt-File auch nur einmal geschreiben, so wie es sein soll. Doch das file der fp.php bleibt nach wie vor aus.
Ã?brigends ist die fp.php chmod 755 und je nach exec() mit #! /usr/local/bin/php4
beginnend.
im Browser rufe ich "datei.php" auf.
Die Datei hat exakt den von Dir geposteten Inhalt.
Quelltexte beider Dateien sind doch hier einzusehen.
Mich würde auch der Grund interessieren warum
das Script bei
$handle=@fopen(time()."_exec.txt","w");
sich aufhängt.
Ich habe schon duzende im www findbare Variantionen an UNIX/Shell-Befehlen für exec() ausprobiert.
Bei manchen wurde das exec.txt-File auch nur einmal geschreiben, so wie es sein soll. Doch das file der fp.php bleibt nach wie vor aus.
Ã?brigends ist die fp.php chmod 755 und je nach exec() mit #! /usr/local/bin/php4
beginnend.