Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    903

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Fehler/Frage] Java Script Adapter exec

Geplant Angeheftet Gesperrt Verschoben Error/Bug
6 Beiträge 2 Kommentatoren 679 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • foxriver76F Offline
    foxriver76F Offline
    foxriver76
    Developer
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • BuZZyB Offline
      BuZZyB Offline
      BuZZy
      schrieb am zuletzt editiert von
      #2

      Hallo,

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

      Gruß

      1 Antwort Letzte Antwort
      0
      • foxriver76F Offline
        foxriver76F Offline
        foxriver76
        Developer
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • BuZZyB Offline
          BuZZyB Offline
          BuZZy
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • foxriver76F Offline
            foxriver76F Offline
            foxriver76
            Developer
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • BuZZyB Offline
              BuZZyB Offline
              BuZZy
              schrieb am zuletzt editiert von
              #6

              Ich auch um ehrlich zu sein.. :lol:

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

              Gruß

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              356

              Online

              32.6k

              Benutzer

              82.2k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe