Programm 24/7 laufen lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
unique24
User
Beiträge: 69
Registriert: Donnerstag 5. Juli 2018, 14:51

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()
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
unique24
User
Beiträge: 69
Registriert: Donnerstag 5. Juli 2018, 14:51

ok danke :-) .. dann mach ich es über ein Linux Service
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten