PHP Script zum Programmausführen, Linux

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Script zum Programmausführen, Linux

    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!

  • #2
    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

    Kommentar


    • #3
      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:

      PHP-Code:
      $output shell_exec("nohub home/ss4/server &");
      echo 
      "$output"
      2. Variante:

      PHP-Code:
      exec ("/home/ss4/server"); 
      3. Variante:

      PHP-Code:
      $descriptorspec = array(
         
      => array("pipe""r"),  // stdin is a pipe that the child will read from
         
      => array("pipe""w"),  // stdout is a pipe that the child will write to
         
      => 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?

      Kommentar


      • #4
        kann mir denn wirklich keiner helfen?

        Kommentar


        • #5
          Moin, da der link nicht funzt, gib mal in der Suche von PHP.net system() ein.
          PHP-Code:
          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
          Das Leben ist kein Ponyhof.

          Kommentar


          • #6
            OK, hab es jetzt ma so getestet:

            PHP-Code:
            $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.
            Zuletzt geändert von Rootserver; 19.10.2004, 15:55.

            Kommentar


            • #7
              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
              Das Leben ist kein Ponyhof.

              Kommentar


              • #8
                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!

                Kommentar


                • #9
                  Versuchs mal so:
                  PHP-Code:
                  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
                  Das Leben ist kein Ponyhof.

                  Kommentar


                  • #10
                    Das was du jetzt geschrieben hast hatte ich auch schon ma probiert, da passiert ebend überhauptnichts.

                    Kommentar


                    • #11
                      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
                      Das Leben ist kein Ponyhof.

                      Kommentar


                      • #12
                        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.

                        Kommentar


                        • #13
                          Hi es gibt sonr möglichkeit

                          dein gameserver als screen zu starten

                          Hier ist ein script dafür!!
                          Datei: gameserver
                          PHP-Code:
                          ##################################################  ####### 
                          # THIS FILE IS FOR STARTING AN COUNTERSTRIKE 1.6 SERVER # 
                          ##################################################  ####### 
                          #             [email]GriZZly@CS-Gemeinde.de[/email]                    # 
                          ##################################################  ####### 
                          # 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: ${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

                          Kommentar


                          • #14
                            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.

                            Kommentar

                            Lädt...
                            X