[PHP] Auf Server zugreifen mit system()

Dieses Thema im Forum "Webentwicklung" wurde erstellt von bigD, 11. Oktober 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. Oktober 2009
    Auf Server zugreifen mit system()

    Hallo,
    hab ne Frage:
    Ich hab auf einem Server einen CS:S Gameserver laufen. Auf dem selben Server liegen im /var/www Verzeichnis einige php-files.
    Jetzt dachte ich mir, um sich den ganzen Terminal Aufwand zu ersparen könnte ich einfach ein PHP Script schreiben um diesen CS:S Gameserver zu starten und zu stoppen.
    Nur funktioniert das nicht. Der Ansatz is da aber an der Ausführung harperts noch etwas.

    So weit bin ich schon:
    PHP:
    error_reporting ( E_ALL );
    $start = $_POST [ 'start' ];
    $stop = $_POST [ 'stop' ];
        if (
    $start )
        {
        
    $exec = system ( "screen -S css1 /home/cs/srcds_run -console -tickrate 100 -secure -game cstrike -port 1337 +map de_dust +maxplayers 50 -autoupdate" );
            if (
    $exec == true )
            {
            echo 
    "Server wurde erfolgreich gestartet!" ;
            }
            else 
            {
            echo 
    "Server konnte nicht gestartet werden!" ;
            }
        }
        elseif (
    $stop
        {
        
    $exec1 = exec ( "screen -r css1" );
        
    $exec2 = exec ( "quit" );
            if (
    $exec1 == true  &&  $exec2 == true )
            {
            echo 
    "Server erfolgreich gestoppt!" ;
            }
            else 
            {
            echo 
    "Server konnte nicht gestoppt werden!" ;
            }
        }
    Ah ja, das 'start' und 'stop' kommt von 2 Buttons von der vorherigen Seite!
    Den Fehler den ich angezeigt bekomme ist immer "Must be connected to a terminal" und der Server startet nicht!

    Wäre super wenn mir da jemand helfen könnte!
     
  2. 12. Oktober 2009
    AW: Auf Server zugreifen

    Ahoi,

    Praktisch wäre hier ein su-wrap skript oder ein skript das du aufrust mittel setuid bit recht gibst,
    denn es könnte Fatal sein, wenn du den CS-Server nicht als ein gesonderten User laufen lässt.
    Desweiteren kannst du aber das mal versuchen:
    Code:
    system("/bin/bash -c 'screen -S css1 /home/cs/srcds_run -console -tickrate 100 -secure -game cstrike -port 1337 +map de_dust +maxplayers 50 -autoupdate'"); 
    MArc
     
  3. 12. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Das hat nicht funktioniert.
    Naja, ich greife mit dem User "cs" darauf zu. Aber muss man sich da nicht irgendwie einloggen oder so? Also per exec oder system Befehl?

    Was is eigentlich der Unterschied zw. exec(), passthru() und system()?
     
  4. 12. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Unterschied steht auf der Manpage:
    PHP: exec - Manual
    PHP: passthru - Manual
    PHP: system - Manual

    Hast du den Safe Mode auf off? Dieser muss ausgeschalten sein damit diese Funktionen gehen. Ansonsten mal nachsehen ob diese Funktionen vielleicht auf dem Server verboten sind.
     
  5. 12. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Safemode is auf off und in den diabled functions sthet exec, passthru und system auch ned drin.

    Was is denn suexec?
     
  6. 13. Oktober 2009
    AW: Auf Server zugreifen mit system()


    Ok, Schade. Im Prinzip müsste es sogar reichen, wenn Du eine Environment-Variable setzt,
    die simuliert, dass der prozess sich in einem terminal befindet.
    Wie du greifst mit User 'cs' darauf zu ? Worauf von wo aus ?
    Wenn du system,exec etc. von einem php skript aufrust, das von dem Apache bedient wird,
    dann wird das argument unter dem User von dem Apache laufen - oft www-data.
    Um den User zu wechseln musst du erst auf Root wechseln und dann anschließend mittels su
    auf den gewünschten User - suexec, suwrap, sudo oder setuid-bit sind heiße Tipps für dich.

    Ansonsten mit dem Manualpage vom screen rumspielen - da steht's drin, wie es funktioniert - kenn ich nur 'grad' nicht auswendig ;D

    MArc
     
  7. 13. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Hmmm...ich kenn mich da nicht so aus.
    Hab suexec mal installiert aber wie verwende ich das jetzt?
    Muss ich da nen User erstellen?
    Kann mir da jmd. unter die Arme greifen?
     
  8. 16. Oktober 2009
    AW: Auf Server zugreifen mit system()

    push! Suche immer noch nach ner Lösung
     
  9. 18. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Hmm...also ich vertseh das alles i-wie nicht warum das nicht geht.
    Kann es sein dass meine Internetseite unter /var/www/ liegt und die Datei auf die ich zugreifen will unter /home/cs/ liegt?
    Sudo hab ich mal installiert, will aber nicht glaub ich...
     
  10. 18. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Sudo hast du "installiert"?

    Naja, egal. Welche Distribution verwendest du?

    Erstelle mal ein Verzeichniss in /home/cs/ mit dem Namen public_html und leg mal da die Files rein.
    Aufruf erfolgt über http://www.deineipdomainoderwasauchimmer.xyz/~cs
    Evtl. ist dann dein Berechtigungsproblem weg. Lese doch auch mal die Apache-Logs, da müssten die Fehlermeldungen drinstehen, wenn es die PHP-File schon nicht ausgibt?
     
  11. 18. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Also:
    in der log steht wenn ich den Befehl
    PHP:
    exec ( 'home/ts/tss2_rc2/teamspeak2-server_startscript stop' );
    ausführe folgendes:
    Code:
    sh: home/ts/tss2_rc2/teamspeak2-server_startscript: No such file or directory
    Der exec Befehl geht warscheinlich vom Verzeichnis var/www/ aus wo die php file drin liegt oder?



    EDIT: Was ich auch schon versucht hab is
    PHP:
    exec ( 'mkdir /test/' );
    Da steht dann in der logfile
    Code:
    mkdir: cannot create directory `/test/': Permission denied
    obwohl ich dem user www-data die rechte
    Code:
    chown -R www-data /var/www/
    gegeben hab...
     
  12. 18. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Man kann auch nicht einfach Ordner im Root erstellen. Du solltest doch langsam den unterschied zwischen relativen und absoluten Pfaden kennen, oder?
    Ein Slash am Anfang bedeutet: Absolut, also von Root aus. Ohne Slash oder mit ./ bedeutet vom aktuellen Ordner aus. Du hast es in beiden Befehlen genau verkehrt herrum gemacht.
     
  13. 19. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Ja es is schon spät^^
    Ok, also folgendes funktioniert jetzt:

    Die PHP-File liegt im Ordner /var/www/test/

    Was bis jetzt funktioniert:
    PHP:
    exec ( 'mkdir ../../../test' );
    dann bekomm ich im root Verzeichnis den test-Ordner

    Was allerdings weder mit diesem Script noch mit putty funktioniert (ich mach erst mal Beispiel an Putty:
    Ich bin im root als User mit allen rechten und geb folgende Befehle ein:
    Code:
    cd /var/www/test
    ../../../home/ts/tss2_rc2/teamspeak2-server_startscript start
    Der Server startet nicht!

    Mach ich meine PHP-File so
    PHP:
    exec ( '../../../home/ts/tss2_rc2/teamspeak2-server_startscript start' );
    funktioniert das eben auch nicht. Liegt also warsch. am TS selbst oder?
     
  14. 19. Oktober 2009
    AW: Auf Server zugreifen mit system()

    Schon einmal :
    Code:
    chdir( '/home/ts/tss2_rc2/' );
    exec( 'teamspeak2-server_startscript start' );
    
    probiert ?
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.