Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
PHP Script zum Programmausführen, Linux [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
PHP Script zum Programmausführen, Linux


 
Rootserver
18-10-2004, 17:54 
 
Hi,

hoffentlich kann mir hier jmd. helfen.

Und zwar möchte ich gerne ein Programm (Gameserver) mittels PHP ausführen.

Ich habe schon alle möglichen Scripte getestet aber keins hat funktioniert.

Wenn ihr genauere infos wollte, dann sagt bitte was ihr braucht.

Auf dem Server läuft Confixx 3.0, safe_mode ist auf off schon gestellt.
open_basedir enthält den Ordner indem sich der Gameserver befindet (/home/testserver), der Gameserver hat auch Unterordner (Maps).

Mein Hauptproblem ist wie gesagt, das der Gameserver nicht gestartet wird.

Danke im Voraus!

 
webstar85
18-10-2004, 18:15 
 
Folgende Funktionen sollten dir dafür helfen ein externes Programm zu starten. Wie der Befehl dafür genau heißt, kannst du nur von deinem Gameserver herbekommen:

http://de.php.net/manual/de/ref.exec.php
http://de.php.net/manual/de/ref.system.php

 
Rootserver
18-10-2004, 20:37 
 
Danke erstmal.

So bei der einen page kommt:

Not Found
The manual page you are looking for (http://de.php.net/manual/de/ref.system.php) is not available on this server right now. Please check back later, or if the problem persist, contact the webmasters.

Ichliste mal am besten die Varianten auf die ich schon versucht hab:

1. Variante:

$output = shell_exec("nohub home/ss4/server &");
echo "$output";

2. Variante:

exec ("/home/ss4/server");

3. Variante:

$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("file", "/home/error.txt", "a") // stderr is a file to write to
);
$process = proc_open("ssh -l 217.160.166.85",$descriptorspec, $pipes);
$return=shell_exec("nohub /home/ss4/server &")or die("Server konnte nicht gestartet werden");
proc_close($process);
echo"$return";

Hat sonst noch wer ni Idee woran es liegen könnte?

 
Rootserver
19-10-2004, 14:56 
 
kann mir denn wirklich keiner helfen?

 
Wendel
19-10-2004, 16:22 
 
Moin, da der link nicht funzt, gib mal in der Suche von PHP.net system() ein.
system('/home/ss4/server'); sollte aber gehen.
Wie siehts denn mit den Rechten aus?
Du brauchst in der Regel rootrechte bzw solltest der Eigentümer sein.
Und server muss executable sein (chmod 700 server -für den root).
Mit php kommst Du ja vom Webserver und der hat nicht die permissions die er braucht, um irgendwas auszuführen.
Gibts irgendwelche Fehlermeldungen?
Gruß Wendel

 
Rootserver
19-10-2004, 16:36 
 
OK, hab es jetzt ma so getestet:

$test=system('/home/ss4/server');
echo"$test";

Es geht, zumindest so lange wie das Script läuft, sobald ich das Browserfenster schliesse ist der Gameserver auch zu. Du siehst doch oben das ich mit nohub gearbeitet hab, kannste mir sagen wie ich das hier integrieren kann?

Danke aber auch schon erstmal.

P.S.: Es wird nichts zurück gegeben.

 
Wendel
20-10-2004, 12:08 
 
Die offizielle syntax lautet : $ nohub make & (LINUX)
um den Prozess loszulösen bin mir nicht sicher, ob Du das gleich mit in den Aufruf schreibst, oder hinterherschickst.
Ich glaube hintendran. Obs da noch optionen und argumente gibt siehst Du im man.
Denke aber es reicht, wenn Du direkt nach dem Aufruf die Anweisung hinterherschickst,
weil er orientiert sich ja an Deiner PID und daraus ergibt sich ja der childprozess, der losgelöst werden soll.
Aber wie gesagt, schau im man des Rechners, auf dem Du ausführst, es gibt da teilweise erhebliche unterschiede je nach unixsystem.
Hoffe das bringt Dich weiter. schick ma den funktionierenden code please, wenns läuft. oder melde Dich
Ud Tschüß Wendel

 
Rootserver
20-10-2004, 17:50 
 
Sorry, aber ich bin nun mal ni so Linuxbewandert, bin halt ein Windoof Kind.

Könntest du mir mal Bitte den Shell Command bitte mal hinschreiben so ich ihn benötige?

Ich hab zwar schon angefangen mich mit Linux zu beschäftigen, aber mir mangelt es an der Zeit.

Gruß und schönen Abend noch!

 
Wendel
21-10-2004, 10:14 
 
Versuchs mal so:system('nohub /home/ss4/server &')
Ansonsten gib mal auf der Shell man nohub ein.
man steht für manual und ist das wichtigste werkzeug zum lernen bzw. nachschauen.
Gibt Optionen und Syntax zum nachfolgenden Befehl an
Grüsse Wendel

 
Rootserver
21-10-2004, 17:57 
 
Das was du jetzt geschrieben hast hatte ich auch schon ma probiert, da passiert ebend überhauptnichts.

 
Wendel
22-10-2004, 12:34 
 
Hast Du mit 'ps -ef' mal geschaut ob Dein Gameserver gestartet ist?
Oder bekommst Du das anders mit, wenn der Server gestartet wird?
Du löst den Prozess los, d.h da wird ein neuer Prozess gestartet und davon merkst Du evtl. nix.
weil das läuft u.U im Hintergrund und Deine Shell gibt keine Meldungen mehr zu dem neuen Prozess.
Wie gesagt, ps -ef zeigt Dir alle Prozesse an die laufen.
Ich habe nohub noch nie aufgerufen, deswegen bin ich da jetzt auch überfragt.
hast Du das einfach mal hinterhergeschickt?
Was sagt Dein manual zu nohub? Hast Du 'nohub make /home/ss4/server & ' getestet? soll Linux Syntax sein.
Aber wie gesagt Unix ist nicht gleich unix. Da gibts zig Derivate von und man muss aufpassen mit den Befehlssätzen!
Hast Du denn unabhängig von PHP mal getestet den Befehl direkt von der Shell aus aufzurufen?
Was passiert dann? Wird ne neue shell aufgemacht oder nicht?
Grüsse Wendel

 
Rootserver
23-10-2004, 22:30 
 
Ich hab doch gesagt, es passiert nichts!

Aso, hatte nohup hier ausversehen mit b anstatt p geschrieben, zumindest hier aber im script richtig.

Und bei deiner Versio0n mit make passiert auch nichts.

 
Ulf12
02-11-2004, 00:31 
 
Hi es gibt sonr möglichkeit

dein gameserver als screen zu starten

Hier ist ein script dafür!!
Datei: gameserver

################################################## #######
# THIS FILE IS FOR STARTING AN COUNTERSTRIKE 1.6 SERVER #
################################################## #######
# GriZZly@CS-Gemeinde.de #
################################################## #######
# Use at your Own Risk !!!!!!!!!!! #
# You need screen installed on your server #
################################################## #######
# Vars: #
# NAME The Screen Name #
# DESC Server Desciption #
# PARAMS HLDS Start Parameter #
# DIR HLDS Directory (absolut) #
# SCRIPT Your HLDS Script #
# DAEMON Your Daemon #
################################################## #######
# OPTIONS: (start|stop|restart) #
################################################## #######

################## Vars #################################
# Screen NAME
# Attach Screen : # screen -r NAME
# Detach Screen : # [CTRL]+[A]; [D]
# Don't press [CTRL]+[C] it will terminate screen
NAME=web8

################## Server Description ###################
# Single Word DESC=myserver
# Multiple Words DESC="This is my Server"
DESC="www.shell4u.de"

################## Parameter ############################
# CAN USE: +servercfgfile server.cfg OR +exec server.cfg
PARAMS="-game cstrike +maxplayers 4 -port 27065 +map de_dust -autoupdate
################## Directory ############################
# Your Path to hlds_l Directory (absolute)
DIR=/home/web8/hlds_l

################## DAEMON ##############################
# You place your startscript here, normally hlds_run
SCRIPT=hlds_run

################################################## ######
#### DONT CHANGE ANYTHINK BELOW THIS LINE ! ! ! ####
################################################## ######

DAEMON=$DIR/$SCRIPT

case "$1" in
start)
echo "Starting $DESC: $NAME"
cd $DIR
screen -d -m -S $NAME $DAEMON $PARAMS
;;

stop)
if [[ `screen -ls | grep $NAME` ]]
then
echo -n "Stopping $DESC: $NAME"
kill `ps aux | grep SCREEN | grep $NAME | cut -d" " -f 6 | awk -F . '{print $1}'|awk '{print $1}'`
echo " ... done."
else
echo "Coulnd't find a running $DESC"
fi
;;

restart)
if [[ `screen -ls | grep $NAME` ]]
then
echo -n "Stopping $DESC: $NAME"
kill `ps aux | grep SCREEN | grep $NAME | cut -d" " -f 6 | awk -F . '{print $1}'| awk '{print $1}'`
echo " ... done."
else
echo "Coulnd't find a running $DESC"
fi

echo -n "Starting $DESC: $NAME"
cd $DIR
screen -d -m -S $NAME $DAEMON $PARAMS
echo " ... done."
;;

*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac

exit 0

##### EOF #####




wenn du die datei eingestellt hast musst du nur noch 3 befehle wissen

1.
./gameserver start
2.
./gameserver stop
3.
./gameserver restart


und diese 3 befehle im php auszuführen ist doch nicht so schwer *gg*

bis dann Ulf

 
Rootserver
02-11-2004, 22:06 
 
Das ist ja das problem!

Das die befehle nicht in PHP auszuführen gehen.

P.S.: Das ist kein CS Server, aber ich denke ma das dein Script trotzdem gehen würde.


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:35 Uhr.