[PHP] shell_exec - Gameserver starten...

almdudler777

Well-known member
ID: 115892
L
21 Mai 2006
45
1
Hallo Leute,

bin noch nich so lange in Linux unterwegs und habe deshalb mal ne frage...

Möchte für unseren Clan ein kleines Webinterface realisieren, damit sie zumindest den Trainingsserver selbst an- und ausmachen können.

Habe daher schon mal ein bisschen rumprobiert. Wollte es nun mit shell_exec lösen, und dann über sudo den Befehl ausführen, damit er unter dem richtigen Benutzer läuft.

Leider schlägt das immer wieder fehl, da der Server eine gewisse shared library nicht laden kann... was immer das auch heißen mag. Wird spielspezifisch an Americas Army liegen, daher brauch sich von euch keiner gedanken darüber machen.

Nun die eigentliche Frage, wie genau funktioniert shell_exec?? ist es möglich mehrere Befehl darüber abzusetzen?

Da ich erst den Ordner auf den Installationsorder des spiels setzen müsste... und dann die Server-bin ausführen muss.

Ich habe mir z.b. dieses Script /etc/init.d/AATrain angelegt damit der server beim Reboot direkt wieder an ist:

Code:
#!/bin/sh
# AAO server startup

case "$1" in
'start')
	cd /home/armytrain/armyops/System/
	sudo -S -u armytrain screen -dm ./server-bin GLOBAL $2 -ini=ArmyOps.ini -nohomedir -log=crash.log &
	cd /
	;;
*)
	echo "Usage: $0 { start }"
	;;
esac
exit 0

wenn ich das mittels

PHP:
<?php
echo shell_exec('/etc/init.d/AATrain start MAPNAME');
?>

aufrufe funktioniert alles...

Wollte es nur gerne ohne ein Script lösen, da man über das Webinterface noch andere Variablen eingeben soll als nur den Mapnamen...

wollte es dann quasi so machen (geht aber irgendwie nicht)

PHP:
<?php
echo shell_exec('
cd /home/armytrain/armyops/System/
sudo -S -u armytrain screen -dm ./server-bin GLOBAL $2 -ini=ArmyOps.ini -nohomedir -log=crash.log &
cd /
');
?>


Wäre cool wenn mich (anfänger) da mal einer aufklären könnte wie das funktionieren könnte...

MFG und danke im voraus
 
Naja, wenn's nur um das Verzeichnis geht, in dem der Befehl ausgeführt wird, kannst du auch chdir() direkt in PHP verwenden.
Ansonsten würd ich vorschlagen, doch einfach den absoluten Pfad zum Server zu benutzen...

Was evtl. auch funktionieren könnte, wäre mit popen() oder proc_open() eine Shell zu öffnen und dort dann die Befehle abzusetzen. Allerdings halte ich obige Lösung für sauberer.
 
Wollte es nur gerne ohne ein Script lösen, da man über das Webinterface noch andere Variablen eingeben soll als nur den Mapnamen...

Du kannst doch mehr Parameter als nur deine beiden an das Script übergeben. Warum sollte das also nicht mit Script funktionieren?
 
@MrToiz:
das mit chdir() werde ich mal ausprobieren.

das mit popen() habe ich bereits vor der shell_exec lösung ausprobiert. Nur wie genau geht das dann? einfach mittels popen('/bin/sh','w') zum schreiben öffnen und dann mittels fput die sachen rein? bei der popen ist ja nur das problem das sie nicht in beide Richtungen geht. Sprich ich bekomme nicht wie bei shell_exec die Ausgabe zurück. Und die Funktion wo es bidirektional geht ist mir zu kompliziert xD

@sebbo: wenn ich ehrlich bin, ist mir der weg mit dem Startscript sogar ganz recht! 1. sauberer 2. kann ich die einzelnen Script direkt in den boot vorgang des ganzen Rechners nehmen... nur mit der (heißt die Sprache einfach nur Bash?) Syntax für die Scripte bin ich nicht ganz vertraut. Das obige ist einfach mittels webmin angelegt... habe mir mal welche zur ansicht geladen aber da muss man sich dann auch erst reinlesen... vorteil mit shell_exec wäre auch, das ich evtl. die Befehl aus einer SQL Datenbank holen kann... weil das was noch kommt ist, der server darf ja nicht 2mal gestartet werden ;) und wie man dieses Startscript dazu bringt eine Datei mit der PID des Servers anzulegen... hmm ja... nee ;) => keine Ahnung