NEWS
Docker Container restart iobroker per script
-
@alka said in restart iobroker per script?:
leider funktioniert die veraltete Lösung per
exec ('iobroker restart');
nicht mehrDas stimmt so nicht.
Iobroker läuft auf der Synology im Docker-Container (Syno aus- und einschalten wäre mir zu brutal...), die Varianten über die Syno-GUI oder Portainer überfordern die Zielpersonen leider
Da liegt das Problem: in Containern kannst du ioBroker nicht gleich behandeln wie als eigenständiger Prozess auf einem "normalen" Linux.
Wie du hier sehen kannst, geht nur
pkill -u iobroker
und das ist für dich keine Option - iobroker sollte ja danach wieder laufen!Portainer hat eine HTTP API, aber die scheint recht kompliziert, damit könntest du den Container neu starten lassen. Du könntest auch einfach direkt auf die Docker API zugreifen, aber auch das ist wahrscheinlich eher kompliziert (Docker im Container installieren (dind), dann Socket mounten und dann mit dem
docker restart CONTAINER
den Container neu starten).Fazit: die Lösung von @fastfoot ist wohl die einfachste.
-
ich danke euch beiden
zumindest wäre dies eine Möglichkeit, falls mir nicht noch etwas besseres unterkommtDas stimmt so nicht.
...
Da liegt das Problem: in Containern kannst du ioBroker nicht gleich behandeln wie als eigenständiger Prozess auf einem "normalen" Linux.naja, zumindest hatte es jedoch mal so funktioniert - in einer älteren Konstellation hatte ich schon einmal eine solche Art von Restart-Knopf angelegt und es hat funktioniert
es ist halt so: die gesamte Hausanlage ist per javascript extrem automatisiert. Aber ich bin nicht mehr der jüngste und etwas angeschlagen - wenn ich mal unerwartet in die Klinik muss und einige Zeit nicht in der Lage bin mich zu kümmern, muss das Haussystem ja weiter laufen. Da soll weder ein Hänger der CCU noch ein ausfallendes Gerät Störungen in den Abläufen verursachen. In größeren Abständen kann sich evtl jemand kümmern, falls es mich ins Nirwana haut oder sich eben doch niemand kümmern will/kann dann kann auch alles wieder 'händisch' betrieben werden - aber kurzfristig muss es halt simpel lösbar sein.
Evtl versuche ich die Sache auch noch mal anders herum - Restart der CCU, danach die HM-Instanzen neu starten, anschließend die script-instanzen
Das könnte ich dann auch selbst nutzen, zB wenn nach Änderungen auf der CCU (Räume, neue Geräte...) die hm-Adapter mal wieder 'verwirrt' sind und die scripte mitreißen. Immer mal wieder finde ich zwar etwas was abfangbar ist und baue es entsprechend ein - aber irgendwas übersieht man immer wenn es noch nie auftrat... -
@thomas-braun said in restart iobroker per script?:
sudo -u iobroker
Alle exec-Befehle aus iobroker laufen bereits als der User ioBroker. Das ist also nicht nötig.
-
@alcalzone
siehe Post 1 - ich versuche jedoch bei Hilfeangeboten diese umzusetzen, auch wenn es scheinbar wider eigenes Wissen wäre (manchmal ist man ja einfach auf dem Holzweg) -
@alka said in restart iobroker per script?:
in einer älteren Konstellation hatte ich schon einmal eine solche Art von Restart-Knopf angelegt und es hat funktioniert
-
@glasfaser
damit kann ich grad nichts anfangen? zumindest etwas zu remote-restart konnte ich beim querlesen nicht finden
ich nutze portainer schon länger (und ja, ich kann problemlos die portainer-Funktionen wie restart nutzen), meine System-Installation läuft und verwaltet 9491 Objekte/ 8347 Zustände, bei 54 hm-Geräten und ca 30 nicht-hm-Geräten mit vieleicht 30 scripts (einige viele tausend Zeilen code) -
@alka said in restart iobroker per script?:
und ja, ich kann problemlos die portainer-Funktionen wie restart nutzen
Eine Idee: kannst du mal mit dem Browser Portainer öffnen und dann die Entwicklerwerkzeuge des Browsers (Chrome/Edge mit F12) öffnen. Dann mal den Container neu starten. Dann solltest du sehen, welchen Request die Website macht. Wenn du Glück hast, kannst du das auch aus deinem Skript ausführen.
-
@alka said in restart iobroker per script?:
@glasfaser
damit kann ich grad nichts anfangen?Ich habe nur André damit informiert.
-
Habt ihr schon mal probiert den Container mit automatischem Restart auszustatten (restart Policy) und einfach alle Prozesse im Container zu killen (pkill -u iobroker && pkill -u root)?
Alternativ sehe ich ein issue im Github mit dem Wunsch einen restart Parameter über das Maintenance Script (Beta) einzubauen...MfG,
André -
@unclesam said in restart iobroker per script?:
Eine Idee: kannst du mal mit dem Browser Portainer
auch der restart per Portainer beendet erst und startet dann, da der Portainer weiterläuft ist das ja kein Problem beide Befehle nacheinander zu senden
sinnvoll geht es mMn nur so oder ähnlich wie von @fastfoot beschrieben, werde es so lösen
ideal wäre natürlich wenn in Zukunft die iobroker-Installation so etwas bereits mitbringen würdeedit:
allerdings sind der restart von adapter/javascript usw. ja problemlos innerhalb des iobroker zu bewältigen
mir ging es um den restart des kompletten iobroker-systemsedit2:
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? -
@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