Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Error/Bug
  4. [Fehler/Frage] Java Script Adapter exec

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

[Fehler/Frage] Java Script Adapter exec

Scheduled Pinned Locked Moved Error/Bug
6 Posts 2 Posters 678 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • foxriver76F Offline
    foxriver76F Offline
    foxriver76
    Developer
    wrote on last edited by
    #1

    Hi Leute,

    ich mache derzeit mit einem eigenen Script fürs Backup rum und wundere mich, dass es nativ ausgeführt super läuft und ich für exec jedoch einige Anpassungen machen musste.

    Erstmal das Skript:

    ! ````
    #!/bin/bash

    deleteDays: Anzahl Tage nachdem alte Backups gelöscht werden sollen

    backupPath: Pfad in den das Backup verschoben werden soll

    deleteDays=14
    backupPath="/home/pi/iobrokerBackup/"
    currentTime="date +%Y_%m_%d-%H_%M_%S"

    ! cd /opt/iobroker/
    ! # Wenn "small" übergeben wurde kleines Backup machen, sonst groß
    if [ "$1" == "small" ]
    then
    # kleines Backup erstellen
    echo "Kleines Backup wird erstellt"
    # ioBroker stoppen
    iobroker stop
    # Backup erstellen
    iobroker backup
    # ioBroker starten
    iobroker start
    # Backups in den gewünschten Ordner ziehen
    mv /opt/iobroker/backups/* $backupPath
    else
    # großes Backup erstellen
    echo "Vollständiges Backup wird erstellt"
    # ioBroker stoppen
    iobroker stop
    # Backup erstellen
    tar -C /opt/ -czf $backupPath/${currentTime}_fullbackupiobroker.tar.gz iobroker
    # ioBroker starten
    iobroker start
    fi
    ! # Ältere Backups löschen, nur die der letzten zwei Wochen erhalten
    echo "Backup wurde erstellt"
    echo "--------------------------------------"
    echo "Folgende alte Backups wurden gelöscht:"
    find $backupPath -name "*.tar.gz" -mtime +$deleteDays -type f -print -delete
    ! ````

    Wenn ich das Skript nativ ausführe, führt er den gewünschten If Block aus sowie anschließend die Löschung der zu alten Backups. Rufe ich das Skript aus iobroker über exec auf, wird nur der jeweilige If-Block ausgeführt, das Backups löschen wird übersprungen. Hatte zuvor den iobroker stop Befehl vor der If-Anweisung, dann hat er über exec nur gestoppt und das wars dann mit Skriptausführung. Kann das Verhalten nicht ganz nachvollziehen. Kann mir jemand das Verhalten erklären oder handelt es sich hierbei gar um einen Fehler?

    beste Grüße

    fox

    Videotutorials & mehr

    Hier könnt ihr mich unterstützen.

    1 Reply Last reply
    0
    • BuZZyB Offline
      BuZZyB Offline
      BuZZy
      wrote on last edited by
      #2

      Hallo,

      hast du nachgesehen ob der if block wirklich komplett ausgeführt wird? Ist das Backup wirklich vorhanden?

      Gruß

      1 Reply Last reply
      0
      • foxriver76F Offline
        foxriver76F Offline
        foxriver76
        Developer
        wrote on last edited by
        #3

        @BuZZy:

        hast du nachgesehen ob der if block wirklich komplett ausgeführt wird? Ist das Backup wirklich vorhanden? `

        Ja, es hat sich wirklich wie gewünscht verhalten beim lokalen ausführen. Habe das Skript dann mal ergänzt, damit stderr und stdout in ein Logfile geschrieben werden und plötzlich hat es geklappt. Das unterschiedliche Verhalten bleibt mir nach wie vor ein Rätsel, hatte eigentlich Permissions in Verdacht, allerdings hatte jeder betroffene Ordner 777.

        Evtl. weißt du was genau der ioBroker für ein Kommando absetzt in die Linux shell? Ein exec aufruf scheint es ja nicht zu sein sondern einfach 1 zu 1 der Befehl, den ich rein schreibe? Und so wie es auf mich gewirkt hat tut er das noch als su, oder?

        beste Grüße

        Fox

        Videotutorials & mehr

        Hier könnt ihr mich unterstützen.

        1 Reply Last reply
        0
        • BuZZyB Offline
          BuZZyB Offline
          BuZZy
          wrote on last edited by
          #4

          Wenn du das Script über die Kommandozeile ausführst ist klar dass es funktioniert - dann läuft es als "eigener Prozess"..

          Das Problem ist, dass wenn du im ioBroker Script z.B. exec('bashscript.sh'); aufrufst, dieses Script als Child-Process von ioBroker gestartet wird.

          Wenn du jetzt in dem bashscript.sh "stop iobroker" stehen hast, wird auch das bashscript.sh selbst gekillt, weil alle ioBroker Child-Processes beim Beenden von ioBroker gekillt werden.

          Deswegen wundert mich eigentlich dass das Script nach der Zeile "iobroker stop" weiter gelaufen ist und das Backup tatsächlich erstellt hat als du es über ein ioBroker Script mit exec(); aufgerufen hast. :lol:

          Aber so gut kenne ich mich mit bash scripting nicht aus dass ich dir da genauere Infos zu geben kann. Sorry.. :)

          Was mit exec() passiert?

          Hier der Code aus Github:
          ` > import child_process = require("child_process");

          …....

          function exec(command: string, callback?: (err: Error, stdout: string, stderr: string) => void): child_process.ChildProcess; `
          Hier die Doku zum verwendeten Modul:

          https://nodejs.org/api/child_process.html

          Gruß

          1 Reply Last reply
          0
          • foxriver76F Offline
            foxriver76F Offline
            foxriver76
            Developer
            wrote on last edited by
            #5

            @BuZZy:

            Das Problem ist, dass wenn du im ioBroker Script z.B. exec('bashscript.sh'); aufrufst, dieses Script als Child-Process von ioBroker gestartet wird.

            Wenn du jetzt in dem bashscript.sh "stop iobroker" stehen hast, wird auch das bashscript.sh selbst gekillt, weil alle ioBroker Child-Processes beim Beenden von ioBroker gekillt werden. `

            Ai, ai, ai… danke. Macht Sinn! :D

            Jetzt bin ich eigentlich verwundert, wieso es aktuell über diese Art läuft.

            Videotutorials & mehr

            Hier könnt ihr mich unterstützen.

            1 Reply Last reply
            0
            • BuZZyB Offline
              BuZZyB Offline
              BuZZy
              wrote on last edited by
              #6

              Ich auch um ehrlich zu sein.. :lol:

              Wie gesagt, kenne mich nicht so gut mit Bash-Scripting aus .. :oops:

              Gruß

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              438

              Online

              32.4k

              Users

              81.4k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe