Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [Fehler/Frage] Java Script Adapter exec

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    [Fehler/Frage] Java Script Adapter exec

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

      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

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

        Hallo,

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

        Gruß

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

          @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

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

            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 Reply Quote 0
            • foxriver76
              foxriver76 Developer last edited by

              @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! 😄

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

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

                Ich auch um ehrlich zu sein.. :lol:

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

                Gruß

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

                Support us

                ioBroker
                Community Adapters
                Donate

                500
                Online

                31.6k
                Users

                79.5k
                Topics

                1.3m
                Posts

                2
                6
                644
                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