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

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
    Hatte mal dieselben Qualen zu erleiden mit diversen Startscripts udn deren je nach Linux System Unzulänglichkeiten die sich meiner Erkenntnis entzogen.

    Anbei gleich eine Startscript das auf meinen Linux-Suse Kisten prima läuft. Die einzige Besonderheit ist die, das die Gameserver Prozesse regelrecht kill -9 $PID abgeknallt werden. Du kannst das auf die Sanfte tour probieren wenn es geht, bei mir gings nicht. Nachteil: Bufferd Log vom Gameserver funzt nicht mehr (Cod2).

    Den Script hab ich leider nicht mit PHP gestartet. Deshalb kann ich die da keine Hilfe geben wie du das einbinden musst. Bei mir sieht das Startscript so aus (kein PHP!, properiäres Teil>:

    <xCGI PATH="moha_start.sh" stdin="start" TOSCREEN=TRUE TIMEOUT=3600 ASYNC=false>

    Und hier der eigentliche Script (musst halt Pfade usw. anpassen)


    #!/bin/sh
    #Autor : Zyrusthc

    #Blos der Name der auf dem Bildschirm für das script ausgeben wird
    NAME="MOHA_TDM"
    #Arbeitsverzeichnis
    BASEDIR="/usr/local/games/mohaadmin"
    #Das Startcommando
    COMMAND="spearhead_lnxded +set fs_basepath /usr/local/games/mohaadmin +set fs_homepath /usr/local/games/mohaadmin +set com_zoneMegs 30 +set cm_game 0 +set dedicated 2 +set ttycon 0 +exec shepyobj.cfg"

    #Hier werden alle ausgaben rein geschrieben !
    LOGFILE=/usr/local/games/mohaadmin/restart.log
    #Hier bewahrt das Script den PID auf um später den
    #Server wieder stoppen zu können
    PIDFILE=/usr/local/games/mohaadmin/moha.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

    Kommentar


    • #3
      Erst einmal danke für die schnelle Antwort.

      Leider scheint das Script aber noch nicht so zu funktionieren. Zum einen funktioniert die .sh Datei zum starten, aber das beenden schlägt bei mir fehl. Offensichtlich stellt der srcrun zwei Prozesse her, den einen, welcher in der PID file beschrieben ist und einen weiteren, jenachdem welchen CPU man benutzt. Ich habe die Datei ./srcds_amd dann versucht direkt zu starten, was aber nicht möglich war offensichtlich. Demnach funktioniert stop leider nicht.

      Ein weiteres Problem ist das xcgi script. Bei mir funktioniert der Aufruf leider nicht.. vielleicht kannst du mir sagen wie ichdas aufrufen soll, da ich bislang noch nie mit cgi gearbeitet habe. Was ich von dem Script zurückbekomme ist nur das:

      Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

      Fehlermeldung:
      Premature end of script headers: test2.cgi

      Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
      Vielen Dank
      Marcel Wlotzka

      Kommentar


      • #4
        Hi,

        den Aufruf
        <xCGI PATH="moha_start.sh" stdin="start" TOSCREEN=TRUE TIMEOUT=3600 ASYNC=false>

        kannst du so auch nicht verwenden. Das ist eine andere Sprache als PHP. Ich hab (noch) keinen Plan wie man mit PHP ein Shell script startet. Das müssten dir die anderen hier sagen können.

        Der Script funzt aber. Ist original so wie ich ihn mehrfach für unterschiedliche GS verwende.

        Das was du meintest mit "je nachdem welche CPU man benutzt " hab ich nicht wirklich verstanden. Auf welcher gehts und wo gehts nicht ?

        Schreib doch mal mehr Infos. Was steht im Pidfile wenn das Ding gestartet ist ? Ist der Prozess aus dem PID auch vorhanden ?

        Kommentar


        • #5
          Ich starte den Prozess "srcds_run" der überprüft welche CPU der PC hat und dann die richtige Datei startet in diesem Falle: "srcds_amd" Danach habe ich zwei Prozesse der srcds_run mit der PID die auch in der Datei gespeichert wird und eben den anderen. Wenn ich dann stop mache wird auch "srcde_run" beendet aber dennoch läuft der Server weiter, weil srcds_amd nicht beendet wird. Da ich ja weiß, dass ich nen AMD PC habe, dachte ich könnte ich sofort srds_amd benutzen, aber das geht offensichtlich nicht..

          EDIT: Habs hinbekommen, habe mein eigenes Startscript geschrieben, damit gehts super, also die Linuxdatei, PHP war komplett richtig eingestellt.
          Zuletzt geändert von Martek; 16.03.2007, 16:04.

          Kommentar

          Lädt...
          X