shell_exec() unabhängig vom PHP-Prozess

BadMatt

Erfahrenes Mitglied
Hey,

Ich bin derzeit an einem Teeworlds Server Webinterface.
Eigentlich bin ich auch schon fertig und wollte das ganze Veröffentlichen ( TWSM ) aber seit ich das ganze jetzt produktiv einsetzen wollte ( keine nur kurzen Test-Server ) habe ich persönlich ( komischerweise noch keiner meiner Tester oO ) ein Problem;

Nach einiger Zeit ( noch keine Regelmäßigkeit festgestellt oO ) stürzen die Server immer ab - entweder alle - oder einzelne, meistens alle in mehreren Etappen ( erst ein Paar dann die anderen ).
Es liegt aber nicht am Game - läuft von Hand gestartet perfekt - oder am vServer ( ispCP Omega 1.03 - Apache2, PHP5, FastCGI ).

In /var/log/apache2/users/*-error.log steht dann nach dem Absturz:
Code:
[DATUM] [notice] mod_fcgid: process /var/www/virtual/*/htdocs/index.php(*12612*) exit(idle timeout), terminated by calling exit(), return code: 0

Allerdings stimmen die Zeiten nicht mit der IdleTimeout Einstellung überein oO

Und gestartet wird der Server via nohup ( vereinfacht ):
Code:
shell_exec('nohup SERVER_DATEI -f CONFIG_DATEI.cfg > LOG_DATEI & echo $!');

- Sollte doch so eigentlich unabhängig vom WebServer laufen oder?

Sollte ich es vlt. eher mit http://de.php.net/ssh2 versuchen?
Wobei das auch nicht so toll ist mit den Passwörtern die übermittelt werden, dem User den man extra anlegen sollte etc. ...


Nebenbei;

Da mir in einem anderen Forum geraten wurde doch mal exec() anstatt shell_exec() zu probieren - es läuft beides wie vermutet aufs selbe raus :(
Habe auch schon etliche andere Sachen ausprobiert wie z.B.:
- shell_exec('(../'.$server.' -d ../ -f ../'.$config.' > /dev/null & echo $!)');
- befehl mit escapeshellcmd() maskiert
- shell_exec('nohup SERVER_DATEI -f CONFIG_DATEI.cfg > LOG_DATEI 2> ERROR_DATEI & echo $!');
...

Auszug aus error.log nach dem letzten Absturz:

Code:
[Mon Mar 15 17:10:50 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24142) exit(idle timeout), terminated by calling exit(), return code: 0
[Mon Mar 15 17:10:50 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24355) exit(idle timeout), terminated by calling exit(), return code: 0
[Mon Mar 15 17:10:50 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24194) exit(idle timeout), terminated by calling exit(), return code: 0
[Mon Mar 15 17:14:56 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24437) exit(idle timeout), terminated by calling exit(), return code: 0
[Mon Mar 15 17:14:56 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24127) exit(lifetime expired), terminated by calling exit(), return code: 0
[Mon Mar 15 17:14:56 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24136) exit(lifetime expired), terminated by calling exit(), return code: 0
[Mon Mar 15 17:14:56 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(21165) exit(lifetime expired), terminated by calling exit(), return code: 0
[Mon Mar 15 17:14:56 2010] [notice] mod_fcgid: process /var/www/virtual/twsm.matthis-brugger.de/htdocs/index.php(24431) exit(lifetime expired), terminated by calling exit(), return code: 0


ps -aux | grep vu2011 vor dem Absturz
Code:
vu2011   21165  [...]  16:58   0:00 /usr/bin/php5-cgi
vu2011   21166  [...]  16:58   0:00 /usr/bin/php5-cgi
vu2011   21167  [...]  16:58   0:00 /usr/bin/php5-cgi
vu2011   24120  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/b9005b519bfb0f05d1ee6e9d22f99ccf.cfg
vu2011   24127  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24131  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24132  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24136  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24137  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24138  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24142  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24143  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24144  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24194  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24219  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24220  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24355  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24360  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24361  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24425  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/4b26c9df579e0b3cba54136523ef6d42.cfg
vu2011   24431  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24432  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24433  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24437  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24439  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24440  [...]  16:59   0:00 /usr/bin/php5-cgi
vu2011   24449  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/bbc52ca51cd33725179c68a44500a7ac.cfg
vu2011   24465  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/df2622f5293dca06d98d7a96dd869802.cfg
vu2011   24479  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/9f12f0cd2df2089ddce0467115f9661a.cfg
vu2011   24494  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/8d91534e02af410ebfb088034ca2ae69.cfg
vu2011   24509  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/308bc225df8fb97015d8bc5e92738a46.cfg
vu2011   24527  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/3c0ff2cda6ef3f4ba869eeb3275e2efd.cfg
vu2011   24543  [...]  16:59   0:00 ../server_files/modpack_x86 -d ../ -f ../configs/74623ef450b488e286ab88d132aab325.cfg


ps -aux | grep vu2011 nach dem Absturz
Code:
vu2011   19596  [...]  17:16   0:00 /usr/bin/php5-cgi
vu2011  [...]  17:16   0:00 /usr/bin/php5-cgi
vu2011  [...]  17:16   0:00 /usr/bin/php5-cgi


Ausserdem stürzen die Server auch ab wenn Apache gestoppt / neugestartet wird - sollten doch aber eigenständige Prozesse sein ... ='(


=> Zentrale Frage; wie kann ich den Prozess aus PHP heraus starten, ohne dass dieser an den PHP-Prozess gebunden ist?

Hoffe hier kann mir jemand helfen =]
Gruß Matthis
 
Hallo Matt,

du könntest den Timeout für php-cli Ausführungen einfach auf 0 setzen und das Script über das cli-Binary aufrufen und schauen, ob der Fehler dann noch immer auftaucht. Außerdem solltest du die Ausgabe mal in /dev/null pipen und den Prozess nach dem Start in den Hintergrund verschieben (&).

Ich weiß nicht ob es funktioniert, war nur der erste Gedanke, als ich deine Frage gelesen habe. Du kannst es mal ausprobieren und das Ergebnis mitteilen.


Beste Grüße aus Berlin.
 
Soweit ich mich errinere erreicht man mit pcntl unabhängige prozesse. Zentraler funkt is die pcntl_fork() funktion. Diese Prozesse kann man auch relativ einfach überwachen und terminieren.
 
Danke für eure Antworten, haben aber leider nichts genutzt =(

@Mircohome:

Habe mal alle Timeouts auf 0 gesetzt und apache neu gestartet, hat leider nichts gebracht =/
Und rufe den Befehl ja schon mit einem & auf um ihn in den Hintergrund zu verschieben ( kompletter Befehl steht oben im ersten Beitrag ).


@Michael:

Also mit den Beispielen die ich auf php.net und bei google gefunden habe gings leider auch nicht -.-
 
Also nach einigem Ausprobieren und über einen kleinen Umweg läuft das jetzt wohl doch mit den pcntl_* Funktionen - danke Michael! =]

( läuft zumindest schon ein Paar Tage am Stück )
 
Zurück