Reboot item mit Exec

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Reboot item mit Exec

Beitrag von PeterA »

Du hast ja auch nun meine Rule abgeändert....
Für mein "Konstrukt" brauchst Du kein Thing.
Nur ein Item und die Rule.
- OpenHab 2.4
#PWRUP

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Reboot item mit Exec

Beitrag von udo1toni »

Backbe01 hat geschrieben: 9. Feb 2022 10:55 Hallo Peter,

habe ich direkt ausprobiert. Leider greift meine rule nicht! (Item natürlich angepasst)

Code: Alles auswählen

rule "restart openHAB"
when
    Item Flag_System received command "Restart"
then
	logInfo("Flag_System", "Restart openHAB")
    executeCommandLine("sudo /bin/systemctl restart openhab.service")
end
Evtl. muss ich den Befehl auch wieder freigeben, obwohl der Befehl eigentlich schon hinterlegt sein sollte:

Code: Alles auswählen

openhab   ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/systemctl, /sbin/reboot
Wie oben erwähnt, executeCommandLine() akzeptiert keine Leerzeichen. Hinterlegt ist /sbin/systemctl, Du versuchst es aber mit /bin/systemctl.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Backbe01
Beiträge: 123
Registriert: 19. Jul 2019 21:04
Answers: 0

Re: Reboot item mit Exec

Beitrag von Backbe01 »

...Es mag einfach nicht klappen...

gebe ich in die CommandoZeile

Code: Alles auswählen

sudo /bin/systemctl restart openhab.service
startet OH3 nach sudo PW neu.

In sudoers habe ich folgende Einträge

Code: Alles auswählen

openhab   ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/systemctl, /sbin/systemctl restart openhab.service
#openhab ALL=(ALL) NOPASSWD: ALL
Weder mit 1. Zeile, noch mit zweiter Zeile starten OH neu

Rule habe ich alle Möglichkeiten durch:

Code: Alles auswählen

executeCommandLine("sudo","systemctl restart openhab.service")
executeCommandLine("sudo","/sbin/systemctl restart openhab.service")
executeCommandLine("sudo","/bin/systemctl restart openhab.service")
executeCommandLine("sudo /bin/systemctl restart openhab.service")
executeCommandLine("sudo /sbin/systemctl restart openhab.service")
Nein... wir werden keine Freunde... Ist aber auch gar nicht so schlimm. Habe derzeit noch andere Probleme mit OH (rrd).

Danke trotzdem! Ich nehme den Thread bei anderer Gelegenheit nochmal auf...
OH 4.1.0M2 auf nuc in Docker

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Reboot item mit Exec

Beitrag von oh73 »

angeregt von diesem Thema hab ich gestern meine Rule zum Restart von openhab auch mal angepasst.

hab mal eine kleine Zusammenstellung was für die Funktion alles benötigt wird.
in der Rule hab ich 2 Varianten versucht, welche aber beide gehen.

1. die Rule

Code: Alles auswählen

rule "openhab System Befehle"
when Item OH_Service changed
then
	if (OH_Service.state=="restart") {
		//executeCommandLine(Duration.ofSeconds(60),"/etc/openhab/scripts/openhab.sh")  // mit sh Script, geht auch !
		Thread::sleep(500)						// wartet etwas und
		OH_Service.postUpdate("Pause")			// schalte Item OH_Service auf nix tun!	
												// weiß nicht ob das gebraucht wird? will aber vermeiden das es eine dauerschleife wird!
		logInfo("OH3", "Restart")
		executeCommandLine(Duration.ofSeconds(60), "sudo","systemctl","restart","openhab") // geht auch!
	}
end
2. im Verzeichnis /misc in der Datei exec.whitelist folgendes einfügen,

für den Befehl mit Script ausführen,

Code: Alles auswählen

/etc/openhab/scripts/openhab.sh
oder für den Befehl direkt in der Rule,

Code: Alles auswählen

"sudo","systemctl","restart","openhab"
das openhab.sh Script sieht so aus,

Code: Alles auswählen

#!/bin/bash

sudo /bin/systemctl restart openhab

echo "Restart openhab "  >> /etc/openhab/scripts/test.txt
3. in der Datetei /etc/sodoers

Code: Alles auswählen

openhab ALL=(ALL) NOPASSWD: ALL eingefügen
die Datei sodoers kann auch je nach System anders heißen oder wo anders sein!

und das schöne daran, wenn ein Befehl mal richtig funktioniert, gehen alle andere System Befehle auch!

z.B. Asterisk Reload, Server reload, shutdown, Verzeichnisse Usb-Laufwerke mounten, unmount, usw.
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Backbe01
Beiträge: 123
Registriert: 19. Jul 2019 21:04
Answers: 0

Re: Reboot item mit Exec

Beitrag von Backbe01 »

Ah!!! Ich glaube jetzt hab ich’s was Udo meinte mit keine Leerzeichen! Bei mir fehlten die „,“.

Muss ich nachher gleich testen und werde berichten…
OH 4.1.0M2 auf nuc in Docker

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Reboot item mit Exec

Beitrag von udo1toni »

Und noch mal... systemctl liegt in /bin, nicht in /sbin, es bringt also nichts, bei NOPASSWD /sbin/systemctl anzugeben. Das KANN nicht funktionieren!
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Backbe01
Beiträge: 123
Registriert: 19. Jul 2019 21:04
Answers: 0

Re: Reboot item mit Exec

Beitrag von Backbe01 »

Vielen Dank, es läuft!! Ich poste noch meine aktuelle Dateien, vielleicht gibt es ja noch mehr solcher DAU´s wie mich :lol:

sduoer: (für OH3)

Code: Alles auswählen

# Allow openhab user to execute shutdown, poweroff, and systemctl commands
openhab   ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /bin/systemctl, /sbin/reboot, /bin/systemctl restart openhab.service
#openhab ALL=(ALL) NOPASSWD: ALL
Rule (OH3)

Code: Alles auswählen

rule "Reboot openHAB"
when
    Item Flag_System received command "Reboot"
then
   	logInfo("Flag_System", "Rebooting openHAB")
    executeCommandLine("sudo","reboot")
end


rule "Shut down openHAB"
when
    Item Flag_System received command "PowerOff"
then
	logInfo("Flag_System", "Shutting down openHAB")
    executeCommandLine("sudo","poweroff")
end

rule "restart openHAB"
when
    Item Flag_System received command "Restart"
then
	logInfo("Flag_System", "Restart openHAB")
    executeCommandLine("sudo","/bin/systemctl","restart","openhab.service")
end
item

Code: Alles auswählen

String Flag_System "System" <switch> (greboot) ["Switch"]
OH 4.1.0M2 auf nuc in Docker

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Reboot item mit Exec

Beitrag von udo1toni »

:)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten