NEWS
Docker Container restart iobroker per script
-
@alka said in restart iobroker per script?:
edit:
allerdings sind der restart von adapter/javascript usw. ja problemlos innerhalb des iobroker zu bewältigenwie würdest du das tun? Ich wüsste jetzt nicht wie ich das bewerkstelligen sollte
mir ging es um den restart des kompletten iobroker-systems
ich wollte mit meinem Vorschlag nicht mit dem Hammer draufschlagen, deshalb nur die Restarts. Natürlich funktioniert auch ein kill aller Prozesse(
pkill io
), was den Container bei entsprechender Einstellung dann automatisch neustartet, wie von @andre vorgeschlagen. Viel cooler wäre natürlich ein eingebauter Reset eines Containers wie von Andre in Aussicht gestellt. Das Warten auf einen Event mittels Skript und sleep ist nicht gerade neuester Stand der Technik und war auch mehr als Workaround gedacht, ob der Linux Watchdog im Container funktioniert, wollte ich nicht testen, reine Faulheitedit2:
innerhalb iobroker ist es ja eigentlich relativ einfach, alle instanzen einzusammeln und neu zu starten - einzig muss es dafür eine zusätzliche javascript-instanz geben, welche die eigentlichen javascript-instanzen wieder startet
wieviel Kapazität frisst denn so einen instanz im system?also bei mir sind das 250MB, war aber auch schon weniger, hängt evtl. mit der Anzahl der Skripte und zusätzlich installierten Module zusammen, wobei eine frisch initiierte Instanz ohne laufende Skripte auch soviel verbraucht wie meine Hauptinstanz
-
@fastfoot said in restart iobroker per script?:
wie würdest du das tun?
Beispiel einzeln in javascript.1 abschalten:setState('system.adapter.javascript.0.alive',false); setState('system.adapter.hm-rega.0.alive',false);
anschließend, evtl mit timeout, wieder einschalten (die adapter jedoch nicht einzeln sondern entweder als Liste festlegen und abarbeiten oder sogar autom. einlesen
-
@alka said in restart iobroker per script?:
@fastfoot said in restart iobroker per script?:
wie würdest du das tun?
Beispiel einzeln in javascript.1 abschalten:setState('system.adapter.javascript.0.alive',false); setState('system.adapter.hm-rega.0.alive',false);
anschließend, evtl mit timeout, wieder einschalten (die adapter jedoch nicht einzeln sondern entweder als Liste festlegen und abarbeiten oder sogar autom. einlesen
och, wie einfach. Dachte immer die alive-DP seien readonly. Ich würde dann aber über diese Restarts gehen anstatt den gesamten Container abzuschiessen, falls irgend möglich. Wäre auch für die Bediener userfreundlicher
-
@fastfoot
ja, zudem ich gerade herausgefunden habe wer/was mir dort Probleme bereitet hat:
https://forum.iobroker.net/topic/40949/problem-fehler-in-mit-history-adapter
dieses script ist aus verschiedenen Gründen notwendig, verhindert aber eine saubere Restart-Aktion -
@alka said in restart iobroker per script?:
ich benötige eine Ein-Klick (bzw zwei-klick da ich ja auch schon beim alten eine Nachfrage drin hatte) Lösung, welche sich in der VIS befindet
Sorry , habe den Thread übersehen das du geantwortet hast !
Hier im Thread Script um Befehl auf Synology ausführen, habe ich per SSH Befehl Synology Hyperbackup gestartet.
Mit dem hier geänderten Script von mir , kannst du den Container neustarten .
EDIT:
Könntest du den Thread Titel vielleicht ändern auf : Docker Container restart iobroker per script?
-
@glasfaser said in restart iobroker per script?:
Mit dem hier geänderten Script von mir , kannst du den Container neustarten .
das ist wesentlich eleganter als meine Lösung, beschränkt die Anwendung aber leider auf einen Restart unter Synology NAS. Mal sehen ob sich für QNAP auch so etwas finden lässt
-
@fastfoot
Ja, bitte! -
eventuell dort etwas dabei ?
https://qnap-dev.github.io/container-station-api/container.html
-
Laut DOKU
Example request of Docker $ curl -sq -XPUT -b cookies.txt \ http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
-
@glasfaser said in restart iobroker per script?:
Laut DOKU
Example request of Docker $ curl -sq -XPUT -b cookies.txt \ http://${QIP}:${QPORT}/containerstation/api/v1/container/docker/<container_id>/restart
Danke! Ein sehr guter starting point, bekomme aber immer einen Authorization error weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin
-
@fastfoot said in restart iobroker per script?:
..., bekomme aber immer einen Authorization error weiss auch noch nicht was es mit der cookies.txt auf sich hat, aber das bekomme ich hin
man sollte auch einloggen Funktioniert astrein, morgen oder so gibts ein kleines Skript, dann klappt der Restart auch auf der QNAP. Nicht dass ich das bräuchte, aber denkbar wäre jetzt auch eine VIS mit einer Übersicht aller Container etc... wird alles als JSON geliefert, freu...
-
@fastfoot
Fantastisch! -
@ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:
@fastfoot
Fantastisch!nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!
-
@fastfoot
Wahnsinn! Vielen, vielen Dank!2021-01-18 20:09:22.686 - info: host.iobroker-d stopInstance system.adapter.javascript.0 (force=false, process=true) 2021-01-18 20:09:22.697 - info: host.iobroker-d stopInstance system.adapter.javascript.0 send kill signal 2021-01-18 20:09:22.698 - info: javascript.0 (5079) Got terminate signal TERMINATE_YOURSELF
Daten sind auch alle da! Da mache ich mir doch glatt auch so eine View.
Nach dem Start des Skripts wurde sofort neu gestartet. Normal?
(TS-453 Pro)
-
@ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:
Nach dem Start des Skripts wurde sofort neu gestartet. Normal?
Nein, nicht normal. Das wird eigentlich durch die Variable firstRun verhindert, jedenfalls beim Erstellen der Datenpunkte passierte das und dann habe ich das eingebaut und es hat funktioniert.
Passiert das bei jedem Neustart des Skripts oder war das eine einmalige Sache? Falls Letzteres passiert es beim Erstellen des Restart-DP und sollte durch die Variable verhindert werden. Gerade getestet und funktioniert wie beschrieben. Falls das bei dir anders ist, kannst du das on() in einen Timeout packen, dann sollte er auch nicht beim Erstellen gleich triggern.
setTimeout(()=>{ on({id: idRestart, change:'any'},async () => { if(dbg) log('Restart') restart(containerName); }) },2000)
-
@fastfoot
War eine einmalige Sache. -
@fastfoot
Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte? -
@ofbeqnpolkkl6mby5e13 sagte in restart iobroker per script?:
@fastfoot
Was müsste man tun, wenn man jetzt noch einen anderen Container neu starten möchte?Die Variable containerName aus einem DP auslesen, anstatt fix festzulegen. Dann muss aber auch das const durch let ersetzt werden. Beim Erstellen des DP als default den Standardnamen angeben und die Zuweisung nach Aufruf von createDatapoints(). In der VIS dann setzen mit Buttons oder mit einem Select von MDW oder was es da sonst noch gibt
-
@fastfoot sagte in restart iobroker per script?:
Die Variable containerName aus einem DP auslesen, anstatt fix festzulegen.
Natürlich!
Dann muss aber auch das const durch let ersetzt werden. Beim Erstellen des DP als default den Standardnamen angeben und die Zuweisung nach Aufruf von createDatapoints(). In der VIS dann setzen mit Buttons oder mit einem Select von MDW oder was es da sonst noch gibt
Okay, danke!
-
@fastfoot sagte in Docker Container restart iobroker per script:
nun ja, von den Infos bin ich nicht soo sehr begeistert, aber immerhin. Ich frage ja aber auch nur die Containerinfos ab. Der Restart funktioniert einwandfrei, bin gespannt ob das auf anderen QNAP-Systemen auch so klappt. Ich habe die in den Dokus genannte curl Methode mit axios umgesetzt, weshalb das in der JS-Instanz eingetragen werden muss. Die Datenpunkte für die Tabelle und den Restart werden automatisch unter 0_userdata.0.QNAP angelegt. Vor dem Start sind User und Passwort sowie die IP Adresse und der Port der QNAP einzutragen. Happy Restart!
Mit dem neuesten Update 2.4 der QNAP Containerstation hat es die verwendete REST API zerschossen, wer also das Skript hier nutzt, sollte nicht updaten und auf einen Fix warten, kann mir nicht vorstellen dass es diesen nicht geben wird. Wer ausserdem weiss wie man die Containerstation downgraden kann, bitte mal melden