Ankündigung

Einklappen
Keine Ankündigung bisher.

Server für shell_exec() / exec() vorbereiten

Einklappen

Neue Werbung 2019

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

  • Server für shell_exec() / exec() vorbereiten

    Hallo! Ich habe ein kleines Problem. Ich bin mir nicht sicher ob es jetzt eine PHP Frage ist oder eine Apache Frage, aber ich denke das ist auch etwas unwichtiger..

    Mein Problem:

    Ich habe auf meinem Suse-Linux Server einen CS:Source Server installiert und ein Shellscript erstellt, welches den Server starten und stoppen kann.

    Wenn ich dieses per root oder anderem Benutzer aufrufe, dann wird zwar alles richtig ausgeführt, aber ohne Effekt.
    Wenn ich die Ausgabe auf dem Bildschirm anzeigen lassen kommt wie es soll
    CS:Source Server 1 started!..
    Also die selbe Meldung die ich per Shell bekomme. Trotzdem bleibt der Server offline!

    Die safe_mode Einstellung habe ich im Vhost bearbeitet, sodass ich überhaupt Zugriff habe auf shell_exec.

    Auch das PHP script zum starten ist definitiv richtig, da ich das selbe bereits auf einem anderen Server früher verwendet hatte. Ich vermutete erst, dass es aufgrund unterschiedlicher Benutzerlogins nicht möglich war und habe die Rechte der Files an den wwwrun benutzer angepasst und alles vorsichtshalber auf chmod 0777 gesetzt. Dennoch kein Unterschied.

    Ich hoffe ihr wisst was es sein könnte was das Script daran hindert zu laufen, bzw hindert das zu tun was es soll.

    Fehlermeldung bekomme ich nicht obwohl ich alles inkl hinweise ausgeben lasse.

    EDIT: Ach was mir auch auffällt ist, dass das Aufrufen des Scripts ca 6 Sekunden dauert. Auf dem alten Server ging das deutlich schneller..

    Danke für eure Hilfe
    Martek

  • #2
    zeig mal den wichtigen Teil des Scripts, dann verstehen wir das Problem ein wenig besser.
    so wie ich verstanden habe, hast du nen vServer ?!

    hast du schon versucht den chown (Besitzer) der Datei anzupassen?
    :arrow: [URL="http://tiny.cc/0xlvv"]Wie man Fragen richtig stellt[/URL]

    Kommentar


    • #3
      Ne es ist ein Rootserver mit Plesk Oberfläche in welchem ich einen Vserver für meine Domain erstellt habe, also safe_mode habe ich so gesehen nicht global verändert sondern nur für den vhost.


      Hier der interessante Teil der PHP Datei:
      PHP-Code:
      <?php
         
      if ($_GET['act']=="start")
         {
            
      $output shell_exec("srcds start");
            
      sleep (3);
            echo 
      $output;
          }
      ?>
      Ich habe das ganze auch mit der kompletten Pfadangabe probiert, wobei ich trotzdem keinen Unterschied sehen konnte.

      Die Shelldatei srcds sieht so aus:

      Code:
      #! /bin/bash
      #
      # Start the Counter-Strike dedicated server.
      #
      # AUTHORS :
      #
      # Julien Escario ( pandemik@azilog.net )
      # &
      # Cedric Rochat ( crochat@younics.org )
      #
      # ===========================================
      #
      # What you need:
      #
      # Linux :)
      # awk
      # screen
      # the srcds_l & cstrike-files (obtainable via steam)
      #
      # How to use:
      #
      # Edit the CS_USER-Var to the user running your css-servers
      # Edit the DIR-Var to fit your system (just contains the path to the dir that contains srcds_run)
      # Edit the PARAMS-Var to fit your needs
      # - standard is startup as LAN-server
      # if you use multiple scripts on a system you should change the NAME-var (otherwise  
      #   all will be stopped if you run the script with "stop"
      #
      # When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the
      # scripts for starting the services
      # Now you can link the script to your runlevel-dir, here's an example for runlevel 3:
      # ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/S90srcds
      # ln -s /etc/rc.d/init.d/srcds /etc/rc.d/rc3.d/K50srcds
      #
      # Or use it manualy like:
      # /etc/rc.d/init.d/srcds start
      # /etc/rc.d/init.d/srcds stop
      #
      # How to see the server-console:
      #
      # Just type in: screen -r cssserver1
      # More info about screen can be found by typing "man screen" or using this nice link
      # http://server.counter-strike.net/help/linuxscreen.html
      #
      #
      # DOC by jwm (jwm@counter-strike.de)
      
      # !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!!
      CS_USER=wwwrun
      # You must be logged in as this user (not by su!) to re-attach the screen!
      
      PATH=/bin:/usr/bin:/sbin:/usr/sbin
      
      # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS!
      DIR=/srv/www/vhosts/mymartek.de/subdomains/server1/httpdocs
      
      DAEMON=srcds_run
      
      # LAN-server:
      #PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust"
      # Internet-server:
      PARAMS="-game cstrike +map de_dust2 -maxplayers 16 -port 27010 -tickrate 100"
      
      NAME=cssserver1
      DESC="CS:S dedicated server"
      
      start() {
         echo "Starting $DESC: $NAME"
         if [ -e $DIR ];
         then
          su $CS_USER -l -c "cd $DIR ; screen -d -m -S $NAME ./$DAEMON $PARAMS"
          echo " ... done."
         else echo "No such directory: $DIR!"
         fi
      }
      
      stop () {
         if [[ `su $CS_USER -l -c "screen -ls" | grep $NAME` ]]
         then
             echo -n "Stopping $DESC: $NAME"
             kill $(su $CS_USER -l -c "screen -ls" | awk -F . "\$2 ~ /$NAME.*/ {print \$1}" | awk '{print $1}')
             echo " ... done."
         else
             echo "$DESC $NAME could not be found. Probably not running."
         fi
      }
      
      
      
      case "$1" in
       start)
         start
         ;;
      
       stop)
         stop
         ;;
      
       restart)
         stop
         start
         ;;
      
       status)
         su $CS_USER -l -c "screen -ls" | grep $NAME > /dev/null
         CHECK=$?
         [ $CHECK -eq 0 ] && echo "$DESC: $NAME is UP" || echo "$DESC: $NAME is DOWN"
         ;;
      
       *)
         echo "Usage: $0 {start|stop|status|restart}"
         exit 1
         ;;
      
      esac
      
      
      exit 0
      Ich habe mitlerweile herausgefunden, dass ein anderes Startscript funktioniert, welches aber auch ohne dem PHP script nicht richtig mit dem CS:Source Server agiert. Aber wenigstens lässt sich dann der Server starten.

      Hier der Quelltext dieses Scripts:
      Code:
      #!/bin/sh
      #Autor : Zyrusthc
      
      #Blos der Name der auf dem Bildschirm für das script ausgeben wird
      NAME="MOHA_TDM"
      #Arbeitsverzeichnis
      BASEDIR="/srv/www/vhosts/mymartek.de/subdomains/server1/httpdocs"
      #Das Startcommando
      COMMAND="srcds_run -game cstrike +map de_dust2 -maxplayers 16 -port 27010 -tickrate 100"
      
      #Hier werden alle ausgaben rein geschrieben !
      LOGFILE=/srv/www/vhosts/mymartek.de/subdomains/server1/httpdocs/restart.log
      #Hier bewahrt das Script den PID auf um später den
      #Server wieder stoppen zu können
      PIDFILE=/srv/www/vhosts/mymartek.de/subdomains/server1/httpdocs/css.pid
      
      case "$1" in
      
      start)
      echo "Starte : $NAME"
      cd $BASEDIR
      if test -f $LOGFILE; then
      echo "Vorhandenes Logfile wird fortgesetzt..."
      elif test $LOGFILE; then
      echo "Logfile nicht vorhanden , erstelle $LOGFILE"
      fi
      
      if test -f $PIDFILE; then
      echo "PID Datei vorhanden "[OK]""
      elif test $PIDFILE; then
      echo "PID Datei nicht vorhanden , erstelle $PIDFILE"
      touch $PIDFILE
      fi
      
      $BASEDIR/$COMMAND 2>> $LOGFILE &
      echo $! > $PIDFILE
      ;;
      
      
      stop)
      PID="`cat $PIDFILE`"
      kill -9 $PID
      echo "Commando wurde beendet"
      rm $PIDFILE
      echo "$PIDFILE wurde entfernt"
      ;;
      
      restart)
      PID="`cat $PIDFILE`"
      echo " ... Server gestoppt ... Kommando Start wird jetzt ausgefuehrt"
      kill -9 $PID
      echo "Starte : $NAME"
      cd $BASEDIR
      if test -f $LOGFILE; then
      echo "Vorhandenes Logfile wird fortgesetzt..."
      elif test $LOGFILE; then
      echo "Logfile nicht vorhanden , erstelle $LOGFILE"
      fi
      
      if test -f $PIDFILE; then
      echo "PID Datei vorhanden "[OK]""
      elif test $PIDFILE; then
      echo "PID Datei nicht vorhanden , erstelle $PIDFILE"
      touch $PIDFILE
      fi
      
      $BASEDIR/$COMMAND 2>> $LOGFILE &
      echo $! > $PIDFILE
      ;;
      
      
      *)
      echo "Usage: $0 Parameter eingeben {start|stop|restart}"
      exit 1
      ;;
      esac
      Das erste Startscript funktioniert seltsamerweise aber wenn ich mich als wwwrun einlogge per shell.. nur wenn ich per PHP das ausführe passiert nichts..

      Kommentar

      Lädt...
      X