Seite 1 von 1

Programm 24/7 laufen lassen

Verfasst: Donnerstag 26. November 2020, 15:04
von unique24
Hallo,

ich möchte mein Programm auf dem Raspi ständig laufen lassen .. wenn ein Programmfehler auftritt, soll es selber neu starten.
Das folgende klappt .. aber ist es auf Dauer auch korrekt?:

Code: Alles auswählen

class Coop(object):
              .......

def start_program():
    try:
        cherrypy.quickstart(Coop(), config=config)
    except Exception as e:
        logger.error(e)
        handle_crash()


def handle_crash():
    time.sleep(5)
    start_program()

if __name__ == "__main__":
    start_program()

Re: Programm 24/7 laufen lassen

Verfasst: Donnerstag 26. November 2020, 15:13
von __blackjack__
@unique24: Nein, so ein wechselseitig rekursiver Aufruf müllt den Stack voll bis es zu einer Ausnahme kommt, und auch die ganzen lokalen Daten von jedem Aufruf bleiben unnötigerweise belegt.

Das würde ich eher von aussen regeln, zum Beispiel über eine systemd-Unit mit der das gestartet wird.

Statt `logger.error()` würde ich `logger.exception()` verwenden. Dann wird auch gleich automatisch der Traceback protokolliert und man sieht dann nicht nur welche Ausnahme aufgetreten ist, sondern auch *wo* die aufgetreten ist.

Re: Programm 24/7 laufen lassen

Verfasst: Donnerstag 26. November 2020, 15:50
von unique24
ok danke :-) .. dann mach ich es über ein Linux Service

Re: Programm 24/7 laufen lassen

Verfasst: Freitag 27. November 2020, 13:55
von DeaD_EyE
Meine erste Wahl wäre ein service für systemd.
Da braucht man sich nicht darum zu kümmern aus dem Prozess einen Daemon zu machen.
Man kann auch festlegen wie schnell und wie oft ein Dienst neugestartet werden soll, falls er abstürzt.
Man kann den Prozess sogar vom restlichen System recht gut isolieren, wenn man das möchte/braucht.
Sofern dein Prozess forkt, kümmert sich systemd auch darum die Kinder zu töten, falls der Prozess beendet wird und die Kinder überleben.