Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Gelöst: Exec wird nicht ausgeführt.

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Gelöst: Exec wird nicht ausgeführt.

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mauflo
      Mauflo last edited by Mauflo

      Kann mir irgend jemand helfen und sagen warum der Excec - Befehl nicht ausgeführt wird? Als Ergebnis bekam ich heute morgen die Mitteilung, "Swap Speicher hatte 56,21 Megabyte und wurde gelöscht". Tatsächlich wurde aber der Swap Speicher nicht gelöscht. Irgendetwas was ich nicht bedacht hatte? In der SSH Shell funktioniert der Befehl einwandfrei!

      // Lösche den Speicher täglich um 04:10
      schedule('10 4 * * *', function () {
          value  = Math.round(((getState('info.0.sysinfo.memory.info.swapused').val/1024)/1024)*100)/100; // ? swapused in MB
          if(value > 0){
              exec('sudo swapoff -a && swapon -a');
              console.log("Swap Speicher hatte "+value+" Megabyte und wurde gelöscht");
          } else {
              console.log("Swap Speicher hatte "+value+" Megabyte und wurde daher NICHT gelöscht");
          }
      });
      

      Danke für Eure Unterstützung!

      1 Reply Last reply Reply Quote 0
      • OliverIO
        OliverIO last edited by

        Ich tippe auf Berechtigung.
        Musst du in der Shell ein Passwort eingeben?
        Mit welchem User arbeitest du in der Shell?
        Mit welchem User ruft Iobroker das auf?
        Hier kannst du schauen wie man Befehle mit Root Access für Script User berechtigt
        https://wiki.ubuntuusers.de/sudo/Konfiguration/

        1 Reply Last reply Reply Quote 0
        • Mauflo
          Mauflo last edited by

          Ganz verstehe ich es nicht, denn der EXCEC-Befehl "sudo reboot" funktioniert im folgenden Script ohne Probleme. Der Befehl ist in der viertletzten Zeile:

          //Abfrage Server Reboot
          //==========================================================================================================================
          // Frage ob der Server tatsächlich neu gestartet werden?
          on ({id: 'javascript.0.Konversation.ServerInfos.ServerReboot',val:true}, function (obj) {
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
              timeout = setTimeout(function () { //damit auch auf jenem Gerät ausgegeben wird, bei dem die Anfrage eingegangen ist
                  geraet = getState('alexa2.0.History.serialNumber'/*serialNumber*/).val;
                  value = "<speak>Soll ich den Server tatsächlich neu starten?</speak>";
                  log("Soll ich den Server tatsächlich neu starten?");
                  ssml_antwort(geraet, value);
              }, 1500);
              timeout1 = setTimeout(function () {setState('javascript.0.Konversation.ServerInfos.ServerReboot', false);}, (12000));
          });
          
          //War die Antwort innerhalb von 8 Sekunden "ja"
          on ({id: 'alexa2.0.History.summary',val:"ja"}, function (obj) {
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
              if (getState('javascript.0.Konversation.ServerInfos.ServerReboot').val == true){    
                  timeout = setTimeout(function () { //damit auch auf jenem Gerät ausgegeben wird, bei dem die Anfrage eingegangen ist
                      geraet = getState('alexa2.0.History.serialNumber').val;
                      value = "<speak>OK, Jetzt wird der Server neu gestartet!</speak>";
                      log("OK, Jetzt wird der Server neu gestartet!");
                      ssml_antwort(geraet, value);
                      setState('javascript.0.Konversation.ServerInfos.ServerReboot', false);
                      log("Reboot Flag wurde auf false gesetzt");    
                      log("Neustart wird jetzt ausgeführt");
                      exec('sudo reboot');
                  }, 2500);
              };
          });
          //==========================================================================================================================
          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO last edited by

            Dann schau mal in die Datei
            /etc/sudoers.d/iobroker

            Mauflo 1 Reply Last reply Reply Quote 0
            • Mauflo
              Mauflo @OliverIO last edited by

              @OliverIO diese Datei ist leer...

              AlCalzone 1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer @Mauflo last edited by AlCalzone

                @Mauflo Wie alt ist deine Installation? Bei neueren dürfte diese nicht leer sein. Dann ist es tatsächlich ein Berechtigungsproblem. swapoff / swapon ist nicht in der Liste der erlaubten Befehle. reboot schon. Wie man das hinzufügt, findest du hier im Forum, wurde schon des öfteren diskutiert.

                Abgesehen davon solltest du mit deiner Konsolenausgabe warten, bis der Befehl auch tatsächlich ausgeführt wurde - nutze dazu den Callback von exec.
                Dein Skript versucht den Befehl auszuführen, loggt sofort den Erfolg, aber bekommt gar nicht mit, ob es geklappt hat.

                Mauflo 1 Reply Last reply Reply Quote 0
                • Mauflo
                  Mauflo @AlCalzone last edited by Mauflo

                  @AlCalzone , na ja so alt ist sie jetzt nicht. Aber ich finde keine Beschreibung dieser Datei. Kannst Du mir vielleicht einen Link angeben, wo ich infos über die Berechtigungen und der Liste der entsprechenden Befehle bekomme? Und danke für den Tip mit der Konsolenausgabe. War tatsächlich nicht sauber programmiert von mir! Danke!

                  AlCalzone 1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer @Mauflo last edited by AlCalzone

                    @Mauflo Erscheint eine Ausgabe, wenn du die Datei mit root-Rechten anzeigen lässt?

                    sudo cat /etc/sudoers.d/iobroker
                    

                    Deinen Befehl kannst du folgendermaßen erlauben:
                    Erstelle mit visudo im Ordner /etc/sudoers.d eine eigene Datei, ich nenne sie hier mal custom:

                    sudo visudo -f /etc/sudoers.d/custom
                    

                    Füge dort für jeden Befehl, den du erlauben möchtest, folgenden Inhalt ein:

                    iobroker ALL=(ALL) NOPASSWD: /voller/pfad/zum/erlaubten/befehl
                    

                    Den vollständigen Pfad kannst du jeweils mit which befehl ermitteln, also in deinem Fall which swapon und which swapoff.
                    Zum Speichern und Beenden des Editors, drücke ESCAPE und dann gebe :wq ein, gefolgt von ENTER

                    1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO last edited by

                      Zur genauen Funktionsweise von sudo, sudoers kannst du unter dem link, den ich oben von ubuntuusers gepostet habe, nachlesen. Dann verstehst du auch etwas besser welche linux Mechanismen hier wirken.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      913
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      javascript
                      3
                      9
                      421
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo