5

Ich habe unter topshelf eine Handvoll von Konsolenanwendungen als Dienste installiert ausgeführt wird, und wenn ich installieren und manuell ausführen, sie funktionieren gut. Sie werden jedoch nicht automatisch gestartet, obwohl der Starttyp auf Automatisch eingestellt ist.Automatische Dienste nicht starten

Die Apps sind wie folgt konfiguriert:

HostFactory.Run(x => 
{ 
    x.Service<MyApp>(s => 
    { 
     s.ConstructUsing(name => container.Resolve<MyApp>()); 
     s.WhenStarted(tc => tc.Start()); 
     s.WhenStopped(tc => 
     { 
      tc.Stop(); 
      container.Dispose(); 
     }); 
    }); 

    x.RunAsLocalSystem(); 
    x.StartAutomatically(); 
    x.EnableServiceRecovery(rc => rc.RestartService(5)); 
}); 

Die Apps unter Win 2008 R2 laufen und sie werden unter Verwendung einer Batch-Datei als Administrator ausgeführt installiert. Die Stapeldatei enthält Folgendes:

app.exe install --sudo 
app.exe start 

Nach dem Ausführen der Batch-Datei die Dienste wie erwartet ausgeführt. Wenn ich jedoch neu starte, bleiben sie gestoppt.

Das Ereignisprotokoll gibt das gleiche Paar der Ereignisse für jeden Dienst:

Event 7000: The service failed to start due to the following error: The service did not respond to the start or control request in a timely fashion.

Event 7009: A timeout was reached (30000 milliseconds) while waiting for the service to connect.

Nur so kann die Anwendung nach einem Neustart zu beginnen ist app.exe start von einer Eingabeaufforderung auszuführen.

Irgendwelche Ideen?

Antwort

4

OK Ich habe es behoben. Die Dienst-Starttypen waren auf Automatisch eingestellt, aber ich habe sie in Automatisch (Verzögert) geändert und alle laufen nun ordnungsgemäß beim Start.

Auch habe ich die Dateien für die zukünftige Verwendung installieren Batch geändert:

app.exe install --delayed --sudo 
app.exe start 

nur eine Vermutung, aber wahrscheinlich abhängig von Netzwerkdienste, die nicht zur Verfügung.

+0

Sie haben mich gerade gerettet 100 Jahre Graben im Müll von Informationen :) – alerya

2

Die wahrscheinlichste Antwort ist, dass es zu lang nimmt der Behälter während des Startens, wenn andere Sachen auf der Maschine erstellt und entschlossen erhalten geschehen. Wenn Sie es manuell tun, konkurriert nichts anderes um Ressourcen. Können Sie einen Teil der Arbeit getan in Ihrem Container bis nach der Erstellung & Start verschieben? Sie können auch mehr Zeit anfordern, aber ich erinnere mich nicht an diese API von meinem Kopf.

+0

Guter Punkt, könnte es eine hohe CPU-Last sein, da jede App eine Warteschlange Verarbeitung auf Amazon SQS tut. Beim Start überprüft der Dienst die Warteschlange, lädt einige Objekte von S3 herunter, verarbeitet sie, lädt zurück nach S3 und schreibt eine neue Warteschlangennachricht. Obwohl es sich nur um ein paar Dutzend Nachrichten pro Stunde handelt, sind sie auf der CPU-Ressource sehr leicht. Aber die Maschine ist eine EC2-Mikroinstanz und möglicherweise könnte die Spitze alle 6 Dienste zum Scheitern bringen ... obwohl ich nicht ganz davon überzeugt bin, dass dies die Ursache ist. Ich werde versuchen, alle außer einem zu deaktivieren und zu sehen, ob ich das zum automatischen Start bringen kann. –

+0

Noch keine Freude. Ich nahm eine neue Aktie win2012 vm und installierte einen einzigen Service und testete den Betrieb. Nach einem Neustart bleibt es gestoppt und das Ereignisprotokoll zeigt den obigen Fehler. Wenn ich den Dienst manuell starte, wird er sofort ausgeführt. –

+0

Wenn Sie eine einfache Reproduktion erstellen und sie an die Mailing-Liste bringen (https://groups.google.com/forum/?fromgroups#!forum/topshelf-discuss) dann können wir vielleicht ein bisschen mehr helfen. Das Symptom hat immer noch das gleiche Problem, es dauert beim Start zu lange. Die Antwort ist also irgendwie verzögert, was beim Start zu lange dauert, aber nicht später. – Travis