NEWS
[Gelöst] Shell Script lässt sich nicht starten
-
Hi,
ich versuche via Javascript ein Shell-Script zu starten und habe als Vorlage das Yeelight Script aus dem Forum genommen, doch irgendwie klappt das überhaupt nicht.
Folgender Befehl in Putty funktioniert bestens:
sh backup.sh Dateiname 10 Dateiverzeichnis
-
Dateiname
-
10
-
Dateiverzeichnis
sind Variablen die ich beim Aufruf der backup.sh mit übergeben muss.
Hier der Javascript Teil der das ganze aufrufen soll:
// ----------------------------------------------------------------------------- // allgemeine Variablen // ----------------------------------------------------------------------------- var logging = true; // Logging on/off var instanz = 'javascript.0'; instanz = instanz + '.'; // // var pfad0 = 'System.Iobroker.Backup.'; // Pfad innerhalb der Instanz - Status allgemien var bash_script = 'bash /opt/iobroker/backup.sh '; // Pfad zu backup.sh Datei var loeschen_nach = '10 '; var kopie_pfad = 'Dateipfad '; var dateiname_anhang='Dateiname '; // ----------------------------------------------------------------------------- // Objekte // ----------------------------------------------------------------------------- function backup_erstellen(name, zeit, pfad) { exec(([bash_script ,name, zeit, pfad].join(''))); if(logging) console.log("exec: " + ([bash_script ,name, zeit, pfad].join(''))); } backup_erstellen(dateiname_anhang, loeschen_nach, kopie_pfad);
Der Befehlaufruf von exec hab ich übernommen von eben dem genannten Yeelight-Script.
Hat vielleicht einer Ahnung warum das nicht funktioniert? Und kann man den Befehlaufruf mitloggen wenn man Putty mitlaufen lässt?
Danke
Steffen
-
-
Was sagt dein Log und welche js-adapter Version hast du drauf?
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
der Log von Iobroker sagt:
javascript.0 2017-12-22 23:46:03.937 info script.js.Backup_Script: exec: bash /opt/iobroker/backup.sh testname 10
und die Javascript Version ist die 3.4.0
Da mein Yeelight Script aber funktioniert denke ich nicht dass die Javascriptversion das Problem ist.
Gruß
Steffen
-
Und kann man den Befehlaufruf mitloggen `
Versuche es mal mit Callback:exec(([bash_script ,name, zeit, pfad].join('')), function(err, stdout, stderr) { if(err) log(stderr, 'error'); else log('exec: ' + stdout); });
-
Und kann man den Befehlaufruf mitloggen `
Ja das gehtLaut dem Log "Backup wird ausgeführt" sollte er das Script ausführen, zumindest bist zum "Backup erstell Befehl", denn die Rückmeldung dass etwas erstellt wurde fehlt:
javascript.0 2017-12-23 07:15:40.766 info --- Backup wird ausgefuehrt --- javascript.0 2017-12-23 07:15:40.766 info script.js.Backup_Script: exec: javascript.0 2017-12-23 07:15:40.758 info script.js.Backup_Script: registered 0 subscriptions and 0 schedules javascript.0 2017-12-23 07:15:40.738 info Start javascript script.js.Backup_Script
Wenn ich alles über Putty mache kommt nach der Erstellung noch folgendes:
Backup created: /opt/iobroker/backups/2017_12_23-07_33_15_backupiobroker.tar.gz
Hab das Shellscript mal auf:
echo #Backup ausführen echo --- Backup wird ausgefuehrt --- ./iobroker backup echo
gekürzt was aber auch nicht funktioniert.
Das Backupscript ist ein Teil des von Knuddel verwendeten (http://forum.iobroker.net/viewtopic.php?f=21&t=9861) sollte somit auch funktionieren.
Die einzigen Unterschiede sind, dass es bei mir nicht im Unterordner scripts/…. liegt sondern direkt im Iobroker Ordner deshalb spare ich mir den Verzeichnisswechsel und ich möchte es nicht via crontab machen weil ich hier keine Ahnung habe sondern über Javascript um das ganze später mal visualisieren zu können.
-
Hat der von dir eingesetzte exec-Aufruf Vorteile gegenüber einem einfachen:
exec("bash /opt/iobroker/backup.sh testname 10");
?
-
Hat der von dir eingesetzte exec-Aufruf Vorteile gegenüber einem einfachen: `
Kann ich dir nicht sagen, da ich hier wirklich keine Anhung habe und mir das eben aus einem anderen Script einfach rauskopiert habe.
Habe es eben auch mal mit deiner "Version" leider auch Erfolglos probiert.
Gruß
Steffen
-
So habe es geschafft,
hier die kurze Erklärung: Der Aufruf der Backupfunktion mit "./iobroker backup" funktioniert nicht aus JavaScript herraus, wenn man aber "iobroker backup" aufruft gehts.
Gruß
Steffen