Laden...

[gelöst] - Wie kann ich eine abgestürzten Dienst automatisch neu starten?

Erstellt von jaipur vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.276 Views
J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 3 Jahren
[gelöst] - Wie kann ich eine abgestürzten Dienst automatisch neu starten?

Hallo Community!

Ich habe da ein Programm welches als Windows-Dienst seine Dienste verrichtet, funktioniert auch so mehr oder weniger. Das Problem, der Dienst stürzt manchmal ab. Um dieses erst ein Mal in den Griff zu bekommen hatte ich mir überlegt aus dem Dienst ein gewöhnliches Programm zu machen und über einen neuen Dienst dann dieses Programm zyklisch aufzurufen. Wobei der Zyklus gerne mehrer Zyklen dauern darf, zeitkritisch ist das alles nicht.

Bei dem aktuellen Dienst handelt es sich um ein sehr großes Programm. 40 C#-Quellcode-Dateien (282KB), bei dem neuen Dienst würde es sich nur um ein sehr kleines Programm handelt, welcher nur den alten Dienst als Programm startet und am besten auch noch alles protokolliert.

Oder einfach alles so lassen und mit einem neuen Dienst den alten Dienst bei Bedarf neu starten?

Vielen Dank im Voraus

16.825 Beiträge seit 2008
vor 3 Jahren

So wie sich das anhört ist der Dienst schon das richtige Konzept.

Aber wenn ein Dienst abstürzt, dann hat das eine Ursache.
Wieso fixt Du die Ursache nicht?

40 C# Dateien mit 282 KB hört sich alles andere nach einem "großen Programm" an, aber da gibts natürlich unterschiedliche Ansichten.

J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 3 Jahren

Hallo und vielen Dank für die schnelle Antwort!

40 C# Dateien mit 282 KB ist für mich schon ein größeres Programm 😉

Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere. Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?

16.825 Beiträge seit 2008
vor 3 Jahren

Bitte doch keine Full Quotes. Bist doch lang genug dabei 😉
[Hinweis] Wie poste ich richtig?

Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere.

Das kommt drauf an wie man einen Dienst sieht (als Microservice oder nicht). Aber das ist ein Pattern und keine Regel für eine Technologie.

Davon abgesehen ist das ja für den Sachverhalt irrelevant.
Der stürzt soll ab, was er nicht tun soll.
Daher fix die Ursache 😉

Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?

Das hat ja mit dem Thema wenig zutun.

Aber ein Dienst ist nicht schlechter oder besser zu Handhaben als eine Desktop-Anwendung.
Das kommt ja auf den Einsatzzweck (und Anforderungen) an.

Pauschal einfach Prozesse starten kann auch sehr große negative Nebenwirkungen haben.

H
523 Beiträge seit 2008
vor 3 Jahren

Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere. Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?

Ich würde einen Dienst immer einer Anwendung die z. B. über die Aufgabenverwaltung gestartet wird vorziehen. Dienste werden in der Regel auch überwacht, so dass der Admin mitbekommt, dass ein wichtiger Dienst ausgefallen ist.

Ich fange in jedem Dienst die Unhandled Exceptions ab und schreibe diese wahlweise in eine Logdatei oder auch ins Ereignisprotokoll. So kriegt man eigentlich recht fix raus, woran es liegt. Ansonsten lassen sich Dienste ja auch debuggen um die Absturzursache zu ermitteln.

6.911 Beiträge seit 2009
vor 3 Jahren

Hallo jaipur,

Ereignisprotokoll

Hast du da einmal hineingeschaut? Bei unbehandelten Ausnahmen steht da oft eine wertvolle Info drin, mit der sich die Ursache rekonstruieren lässt.

Dienst ein gewöhnliches Programm zu machen und über einen neuen Dienst dann dieses Programm zyklisch aufzurufen

Du weißt schon dass in der Dienstkonfiguration das Neustartverhalten eingestellt werden kann? Das würde ich vorziehen, denn so geschieht es mit Bord-Mitteln und nicht per selbst gebauten Analogon.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 3 Jahren

Hallo und vielen Dank für die nützlichen Infos!

Ich werde den Dienst so belassen wie er ist und mich auf die Fehlersuche begeben, ich denke dies es der richtige Weg ist 😃

Nochmals vielen Dank!

3.170 Beiträge seit 2006
vor 3 Jahren

Hallo,

ich programmiere einen Dienst generell immer so, dass die ganze Logik in einer eigenen Assembly (oder mehreren) liegt, und ich dann auch ein minimales Konsolenprogramm schreiben kann, welches diese Logik ausführt. Das ist bei Diensten auch immer möglich.
Das ist oft sehr hilfreich beim Debuggen und bei der Fehlersuche, und ich kann dieses Vorgehen aus Erfahrung wärmstens empfehlen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca