phpbar.de logo

Mailinglisten-Archive

[php] Wie externe Befehle im Hintergrund ausführen und ausführend lassen?

[php] Wie externe Befehle im Hintergrund ausführen und ausführend lassen?

Michael Dunkel michael.dunkel at ipoque.com
Die Jan 27 10:48:13 CET 2009


Hab letztens ein kleines script gebastelt was über den browser/webserver 
nen gameserver startet, ich bin mir nicht mehr sicher warum ich dafür 
einen sudo in den shellaufruf rein genommen habe, aber kanns sein das 
der user www-data keine hintergrundprozesse ausführen darf? ... bin mir 
da nicht mehr so sicher ... allerdings habe ich auch den gameserver im 
screen ausgeführ, was natürlich wieder ne andere geschichte ist
aber vielleicht wäre das auch eine möglichkeit für dich, einen Benutzer 
anlegen, dem www-data in die sudoers liste mit aufnehmen und ihn aber 
nur auf diesen einen benutzer beschränken, dort dann deine prozesse in 
jeweils nem seperaten screen ausführen lassen ... problem daran wird 
vielleicht sein, du musst den screen wieder beenden, oder beendet der 
sich dann selber wenn der prozess fertig ist (wer weiß was darüber, liste?)

mein php script sieht jedenfalls so aus:

<?php

echo "Stoping the Server<br />";
exec('sudo -u srcds screen -S rpgserver -X quit');

$temp = "srcds_run -game cstrike +map de_dust2 -tickrate 100 -port 28015 
+maxplayers 20 -autoupdate";

echo "Starting the Server";
exec('cd /home/srcds/cssrpg/; sudo -u srcds screen -A -m -d -S rpgserver 
/home/srcds/cssrpg/'.$temp);


der entsprechende eintrag in der sudoers
www-data        ALL=(srcds) NOPASSWD: ALL

der benutzer srcds ist an sich aber auch wieder extrem eingeschränkt so 
das da nicht viel passieren falls jemand mal auf dumme ideen kommt :-)

hoffe das hilft irgendwie


Christian Knorr schrieb:
> Am Mittwoch 21 Januar 2009 17:12:41 schrieb Michael Dunkel:
>   
>> Hi,
>>     
> Hallo Michael,
>
>   
>> du könntest den befehl im hintergrund ausführen indem du ein "&" ans
>> ende setzt:
>>
>> exec("ffmpeg -i eingang.mpg ausgang.mpg &")
>>
>> z.b. per ajax kannst du dann ein weiteres script ansteuern was dir mit "ps
>> -aux | grep ffmpeg -i eingang.mpg ausgang.mpg" anzeigen kann ob der prozess
>> fertig ist oder nicht
>>
>> wenn du nun noch die ausgaben des prozesses haben willst kannst du auch mit
>> nohup die ausgaben in eine datei schreiben lassen und diese dann mit ajax
>> und nem script im 5 sekundentakt auslesen und anzeigen oder sowas
>>     
> Funktioniert leider nicht. Egal ob mit "&" am Ende, und/oder "nohup" am 
> Anfang; der Befehl wird immer gekillt wenn ich die (PHP-)Seite verlasse, auf 
> der der Befehl ausgeführt wurde.
>
> Das mit der Überwachung habe ich mittlerweile gelöst, wenn auch ohne ajax.
> Nur ist wie gesagt irgendwann der Prozess weg.
>
> Weitere Ideen?
>
>   
>> Grüße
>> Micha
>>     
> Chris.....
>
>   


-- 
Michael Dunkel | Web Development | ipoque
Mozartstr. 3 | 04107 Leipzig | Germany
phone + 49-341 - 59 40 3 - 0 | mobile +49-160 72 49 124
fax +49-341 59 40 3 - 019 | web www.ipoque.com
trade register Amtsgericht Leipzig HRB21462
Gesellschaft mit beschränkter Haftung (GmbH)
board Klaus Mochalski, Hendrik Schulze, Dr. Frank Stummer

ISS World MEA, Dubai, 24-26 February 2009
ipoque Executive Blog at http://blog.ipoque.com


php::bar PHP Wiki   -   Listenarchive