IPS aus Script restarten

Hallo,

ich versuche, mein IPS (auf Raspberry) aus einem Script neu zu starten. Das brauche ich, weil die Webserver Instance nach meiner (automatischen) LE Zertifikatsaktualisierung das so verlangt (kann man dem Webserver Modul nicht auch eine Restart Funktion verpassen??? :slight_smile: )
Allerdings tut der Befehl bei mir rein gar nichts. (ob die Optionen true oder false sind spielt auch keine Rolle. Geht so ein „Selbstmord“ aus Prinzip nicht?

IPS_Execute("/bin/systemctl","restart symcon",false,false);  

Das liegt wohl eher daran das es kein scripttimeout gibt. Das heisst dein script will symcon beenden, symcon wartet aber aber, bis das script fertig ist.

Versuch mal mit & in den hintergrund zu bringen also „systemctl restart symcon &“

Gute Idee, das war es aber leider nicht (getestet aus der Schnellausführung)

Hi,

versuch mal so:

ips_execute("/bin/bash","/bin/systemctl restart symcon &", false,false);  

leider auch nicht. Der letzte Restart ist länger her

ps -ef|grep symcon
root     29185     1  9 20:38 ?        00:06:31 /usr/bin/symcon service
root     31988 22633  0 21:47 pts/0    00:00:00 grep symcon

ich habe mal ein wenig experimentiert…

shell_exec("service symcon restart");

stoppt symcon, aber nur bis zu diesem punkt

27.01.2024 23:46:47 | 00000 | MESSAGE | ScriptEngine         | Warte auf Beendigung aller Skript-Threads...

Klar, das script wird ja ausgeführt. Es gibt kein Zeitlimit mehr, also bleibt es bis zur Ewigkeit
@Paresy, auch nach 5 min…

ein

shell_exec("service symcon restart > /dev/null 2>&1 &");

schubst das ganze in den Hintergrund, symcon beendet sich zwar, aber kann nicht mehr starten

01/27/24 23:49:30 | 00000 | MESSAGE | LocalePool           | Removing...
01/27/24 23:49:30 | 00000 | MESSAGE | Kernel               | bind: Address already in use
01/27/24 23:49:30 | 00000 | MESSAGE | Kernel               | Removing...
01/27/24 23:49:30 | 00000 | SUCCESS | Kernel               | *** IPS SHUTDOWN COMPLETE
01/27/24 23:49:30 | 00000 | MESSAGE | TimerPool            | Terminating timer thread...
01/27/24 23:49:30 | 00000 | MESSAGE | TimerPool            | Removing...
01/27/24 23:49:30 | 00000 | MESSAGE | ScriptEngine         | Removing...
01/27/24 23:49:30 | 00000 | MESSAGE | ScriptEngine         | Waiting for all script threads to terminate...

Scheinbar wird weiterhin ein Thread belegt, daher klappt das nicht. Auch das ganze in ein externes Script zu packen und aufzurufen schlägt mit obiger Meldung fehl.

Der Trick ist daher, das ganze zeitgesteuert auszuführen, dazu musst Du

apt install at

nachinstallieren. Dein Script muss nun so aussehen

shell_exec("echo \"service symcon restart\" | at now");

at ist ein wenig komisch, du musst dein Befehl in ein echo packen und über die pipe schicken. Nun sorgt der at dafür das „service symcon restart“ ausgeführt wird, in seinem eigenem Handle…

Danke fürs ausprobieren. Ist ja ziemlich von hinten in die Brust. So wie ich das sehe wäre es schon sinnvoll das als natives Kommando zu implementieren (ja ich kenne die Diskussion aus 2020?, wonach es auf Grund der Betriebssystemabhängigkeit schwer zu implementieren wäre, aber wer weiss wie man einen Prozess auf dem OS startet kann ihn sicher auch genauso gut neustarten).

Da ich das Kommando über RPC ohnehin von einem anderen Rechner ausführe, kann ich dann von dort auch noch ein ssh mit dem Restart nachschieben, ist wohl einfacher