Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Exec unter JavaScript führt Shell Script nicht aus

    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

    Exec unter JavaScript führt Shell Script nicht aus

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

      Habe iobroker 4.0.9 und JS 4.5.1 installiert.
      Das Skript

      function execScript(){
          exec('/home/iobroker/test.sh', function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
          console.log('stdout: ' + error);
          });
      }
      

      hatte ich natürlich bevor ich mit der Fehlersuche anfing. Das sudo und Varianten habe ich dann im Laufe erfolglos getestet. Ja der Exec Command ist erlaubt. Reboot und ls etc läuft ohne Probleme.

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

        @WurstDLX Der Skript-Adapter läuft als User iobroker. iobroker darf nur bestimmte Kommandos als sudo ausführen. /home/iobroker/test.sh gehört nicht dazu. Du kannst es aber manuell erlauben, indem du die /etc/sudoers.d/iobroker bearbeitest oder (bessere) im selben Verzeichnis eine eigene Datei pflegst. Wie das geht wurde schon zuhauf hier im Forum beschrieben.

        Allerdings bezweifle ich, dass root-Rechte nötig sind (und vermutlich ist es sogar schädlich), um im Home-Verzeichnis von iobroker als dieser User einen Ordner anzulegen.
        Kommt denn bei der Variante ohne sudo ein Fehler? stderr hast du ja nicht ausgegeben.

        harrym W 2 Replies Last reply Reply Quote 0
        • harrym
          harrym @AlCalzone last edited by

          @AlCalzone sagte in Exec unter JavaScript führt Shell Script nicht aus:

          /etc/sudoers.d/iobroker bearbeitest oder (bessere) im selben Verzeichnis eine eigene Datei pflegst.

          ? der fixer legt doch den user iobroker in sudoers an, falls nicht vorhanden ? und im seinem HOME ... hat der "user" iobroker doch normal alle rechte ... AUSSER das test.sh wurde
          durch nen anderen user erstellt 😉

          1 Reply Last reply Reply Quote 0
          • Wal
            Wal Developer last edited by

            function execScript(){
               exec("echo 'passwort'|sudo -S dmesg", function (error, stdout, stderr) {
                console.log('stdout: ' + stdout);
                console.log('stdout: ' + error);
                });
            }
            

            Mit sudo geht's auch.

            harrym 1 Reply Last reply Reply Quote 0
            • harrym
              harrym @Wal last edited by

              @Wal klar ... da brauchste es sudo , dass der "user" iobroker ja hat .... biste ausserhalb vom iobroker home .... mit dmesg

              1 Reply Last reply Reply Quote 0
              • Wal
                Wal Developer last edited by

                Mach ein

                chmod +x test.sh
                

                dann geht es

                harrym 1 Reply Last reply Reply Quote 0
                • harrym
                  harrym @Wal last edited by

                  @Wal .... thx! an das hab ich nicht gedacht .... dass es script ned ausgeführt werden darf g

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

                    @AlCalzone
                    Also von vorne: Ich habe natürlich ohne sudo das aufgerufen und dann kommt das was ich bereits im ersten Post geschrieben hatte:
                    stderr:"Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die Regeln erklärt hat. Normalerweise läuft es auf drei ..."
                    stdout:
                    error: "Error: Command failed: /home/iobroker/test.sh Wir gehen davon aus, dass der lokale Systemadministrator Ihnen..."

                    Das Skript wurde natürlich als user pi angelegt und per

                    chown -R iobroker:iobroker test.sh
                    

                    geändert.

                    chmod +x test.sh
                    

                    habe ich bereits getan gehabt. Wie gesagt, in der Shell läuft das Skript normal wie erwartet. Es wurde ins Verzeichnis /home/iobroker getan und wird dennoch nicht von js ausgeführt, bzw mit der oben genannten Fehlermeldung.
                    Der Aufruf mit sudo war einer von vielen Tests die ich im Anschluss getan hatte 😞

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

                      @harrym sagte in Exec unter JavaScript führt Shell Script nicht aus:

                      der fixer legt doch den user iobroker in sudoers an

                      Nein, der legt die genannte Datei an, die definiert, welche Befehle iobroker per sudo passwordless ausführen darf.
                      Aus Sicherheitsgründen darf iobroker nur das nötigste per sudo ausführen.

                      @Wal sagte in Exec unter JavaScript führt Shell Script nicht aus:

                      exec("echo 'passwort'|sudo -S dmesg"

                      Wie willst du das machen, wenn der User iobroker kein Passwort hat?

                      @WurstDLX sagte in Exec unter JavaScript führt Shell Script nicht aus:

                      in der Shell läuft das Skript normal wie erwartet.

                      In der Shell bist du sicherlich nicht als iobroker angemeldet oder?

                      Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die Regeln erklärt hat. Normalerweise läuft es auf drei ...

                      Verwendest du sudo im Skript? Dann müssen dem User iobroker alle Kommandos mit sudo passwordless erlaubt werden.

                      Die Suche liefert z.B. folgenden Post:
                      https://forum.iobroker.net/post/356868

                      Wal W 2 Replies Last reply Reply Quote 1
                      • AlCalzone
                        AlCalzone Developer @WurstDLX last edited by

                        @WurstDLX sagte in Exec unter JavaScript führt Shell Script nicht aus:

                        mkdir testordner

                        Öhhhhhh - hast du mal nen absoluten Pfad probiert?
                        /home/iobroker/testordner

                        Ich bin gerade nicht sicher, in welchem Verzeichnis exec die Befehle ausführt.

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

                          @AlCalzone sagte in Exec unter JavaScript führt Shell Script nicht aus:

                          @Wal sagte in Exec unter JavaScript führt Shell Script nicht aus:

                          exec("echo 'passwort'|sudo -S dmesg"

                          Wie willst du das machen, wenn der User iobroker kein Passwort hat?

                          Stimmt du hast recht, bin jetzt von mir ausgegangen. Ich erstelle vor der Installation von ioBroker immer den User "iobroker".
                          Ich möchte keine anderen User auf meinem Server nur zur Administration.

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

                            @AlCalzone
                            Ooh, vor lauter Testerei habe ich das sudo im Skript selbst vergessen :/.
                            Jetzt führt er es aus, nur ist der Fehler diesmal, beim mkdir, dass er keine Berechtigung hat den testordner anzulegen.

                            @AlCalzone DAS WAR ES! Dachte irgendwie er führt das Skript als user iobroker relativ aus, aber vmtl aus seiner js Instanz heraus.

                            Es klappt, wenn man jetzt den Ordner woanders anlegen lassen will, geht das dann überhaupt?

                            Danke euch!!!

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

                              @WurstDLX sagte in Exec unter JavaScript führt Shell Script nicht aus:

                              wenn man jetzt den Ordner woanders anlegen lassen will

                              Du könntest sowas probieren:

                              exec("cd /woanders && /home/iobroker/testscript.sh", ...)
                              
                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              863
                              Online

                              31.8k
                              Users

                              80.0k
                              Topics

                              1.3m
                              Posts

                              blockly javascript
                              5
                              15
                              3081
                              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