Seite 2 von 2

Re: Reboot item mit Exec

Verfasst: 9. Feb 2022 11:36
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.

Re: Reboot item mit Exec

Verfasst: 9. Feb 2022 17:09
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.

Re: Reboot item mit Exec

Verfasst: 10. Feb 2022 09:57
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...

Re: Reboot item mit Exec

Verfasst: 10. Feb 2022 12:00
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.

Re: Reboot item mit Exec

Verfasst: 10. Feb 2022 12:13
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…

Re: Reboot item mit Exec

Verfasst: 10. Feb 2022 19:35
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!

Re: Reboot item mit Exec

Verfasst: 11. Feb 2022 09:48
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"]

Re: Reboot item mit Exec

Verfasst: 11. Feb 2022 11:06
von udo1toni
:)