Ankündigung

Einklappen
Keine Ankündigung bisher.

SSH Ausgabe wird teilweise nicht erkannt

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

  • SSH Ausgabe wird teilweise nicht erkannt

    Guten Tag,

    ich habe eine Funktion gebastelt, welche herausfinden soll, welche Prozesse auf meinem Linux Ubuntu Server laufen. Hierfür verwende ich den Befehl top -n 1 -b | agrep 'ts3;ts3server', welche eine Ausgabe hat, wenn der Prozess läuft.
    Dies wird in meinem Array $data gespeichert, mit welchem ich in einer anderen Funktion weiterarbeite.

    PHP-Code:
    function getServersStatus() {
        
    $user '**********';
        
    $password '**********';
        
    $cmd = array ("top -n 1 -b | agrep 'ts3;ts3server'""top -n 1 -b | agrep 'arma3se;arma3server'""top -n 1 -b | agrep 'rustser;RustDedicated'""top -n 1 -b | agrep 'arkserv;ShooterGameServ'""top -n 1 -b | agrep 'factorio;screen'""top -n 1 -b | agrep 'minecra;java'""top -n 1 -b | agrep 'gtmp;mono'");
        if(
    $ssh ssh2_connect('127.0.0.1'22)) {
            if(
    ssh2_auth_password($ssh$user$password)) {
                
    $i 0;
                while(
    $i SERVER_COUNT) {
                    
    $stream ssh2_exec($ssh$cmd[$i]);
                    
    $stream_out ssh2_fetch_stream($streamSSH2_STREAM_STDIO);
                    
    stream_set_blocking($stream_outtrue);
                    
    $data[$i] = stream_get_contents($stream_out);
                    
    $i++;
                }
            }
        }
        
    var_dump($data);

    Das Array sieht wie folgt aus:
    Code:
    array(7) { [0]=> string(78) " 1228 ts3 20 0 1188324 11728 4336 S 0.0 0.1 101:19.81 ts3server " [1]=> string(80) "28834 arma3se+ 20 0 815708 654800 2328 S 0.0 8.0 3:01.09 arma3server " [2]=> string(0) "" [3]=> string(0) "" [4]=> string(75) "27852 factorio 20 0 32516 1712 1712 S 0.0 0.0 0:00.00 screen " [5]=> string(73) "28620 minecra+ 20 0 6930576 1.406g 3456 S 6.2 18.0 30:09.55 java " [6]=> string(0) "" }
    Alle Server bis auf GTMP sind online. GTMP hat deswegen einen leeren String. Rust und ARK allerdings auch. Wenn ich in putty den Befehl "top -n 1 -b | agrep 'rustser;RustDedicated'" oder "top -n 1 -b | agrep 'arkserv;ShooterGameServ'" erhalte ich allerdings eine Ausgabe, da die Server ja laufen. Diese wird anscheinend nicht in meinem Array $data gespeichert und ich kann leider nicht herausfinden warum. SERVER_COUNT ist mit 7 belegt. Vielleicht hat hier jemand einen Lösungsvorschlag. Danke im Voraus!


  • #2
    Wieso top und wieso so häufig ?
    prozesse in der console ps, du kannst aber auch direkt mit /proc arbeiten.
    port listet man mit netstat auf.

    Was ist SERVER_COUNT ?

    Kommentar


    • #3
      Bei ps ist das Problem das GTMP z.B. mit mono läuft, was durch eine andere Anwendung auch benutzt wird d.h. ich bekomme damit immer einen laufenden Prozess und weiß nicht, ob dieser von GTMP oder nicht ist.
      Das Hauptproblem ist eigentlich, dass die Ausgaben nur teilweise gespeichert werden.

      SERVER_COUNT ist ein von mir erstelltes define, welches die Anzahl der Server speichert, also 7 in dem Fall.

      Kommentar


      • #4
        ich komme so mit Deinem Code nicht klar und weissnicht was wo wie gespeichert wird.
        ohne den code grossartig umzushreiben, kann ich das auch nicht nachvollziehen.

        deine sorgen mit ps verstehe ich nicht, ps tut hier, da gebe ich dir recht aber auch nichts zur sache.

        Kommentar


        • #5
          Mit top frage ich ab, ob der Prozess gerade läuft. Wenn das der Fall ist, dann wird etwas wie
          Code:
          1228 ts3 20 0 1188324 11728 4336 S 0.0 0.1 101:19.81 ts3server
          ausgegeben und in dem Array $data gespeichert. Das ist im Prinzip schon alles. Wenn ich nun "top -n 1 -b | agrep 'rustser;RustDedicated'" oder "top -n 1 -b | agrep 'arkserv;ShooterGameServ'" in Putty eingebe, bekomme ich eine Ausgabe. In meiner PHP Funktion wird aber trotzdem nichts in $data geschrieben, was komisch ist. (Habe das mit ps nochmal nachgelesen und eine Lösung gefunden, die mit ps auch funktioniert. Allerdings ändert das wie gesagt nichts an dem eigentlichen Problem.)

          Kommentar


          • #6
            hatten wir schon, ich gab dir ja auch recht.
            Du meinst also entweder ssh2_exec oder ssh2_fetch_stream läuft nicht wie erwartet, wenn ich Deine Einlassungen richtig interpretiere.
            es gilt aber noch:
            ohne den code grossartig umzushreiben, kann ich das auch nicht nachvollziehen.

            Kommentar


            • #7
              Du meinst also entweder ssh2_exec oder ssh2_fetch_stream läuft nicht wie erwartet, wenn ich Deine Einlassungen richtig interpretiere.
              Richtig ja.

              ohne den code grossartig umzushreiben, kann ich das auch nicht nachvollziehen.
              Und was müsste man umschreiben? Hätte kein Problem damit eine neue Implementierung zu nehmen. Hauptsache es macht was es soll ^^

              Kommentar


              • #8
                Zitat von waayne Beitrag anzeigen
                Richtig ja.


                Und was müsste man umschreiben? Hätte kein Problem damit eine neue Implementierung zu nehmen. Hauptsache es macht was es soll ^^
                Solange ich nicht mit c&p den Code bei mir testen kann, macnht es für mich wenig Sinn mich weiter damit zu beschäftigen.

                ich habe ein sshserver und cms wie
                Code:
                 php -v
                oder
                Code:
                 .ls .-al
                oder die siche nach laufende prozesse mit interpreter
                /usr/bin/python /usr/sbin/fts --config /etc/fts/config
                ohne interpreter
                Code:
                /usr/sbin/apache2 -k start
                könnte ich auch starten.
                aber so ist mir der Aufwand zu groß das bei mir zum laufen zu bringen.

                Debugging Bemühungen Deinerseits lassen sich am geposteten Code auch nicht erkennen.

                Kommentar

                Lädt...
                X