5

我有幾個控制檯應用程序作爲服務在頂棚下運行安裝,如果我手動安裝和運行,他們工作正常。但是,即使啓動類型設置爲自動,也不會自動啓動。自動服務不啓動

這些應用被配置如下:

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)); 
}); 

這些應用2008贏R2下運行,並且它們使用如管理員執行批處理文件進行安裝。該批處理文件包括以下內容:

app.exe install --sudo 
app.exe start 

執行批處理文件後,服​​務按預期方式運行。但是,如果我重新啓動他們仍然停止

事件日誌返回每個服務在同一對的事件:

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.

到啓動應用程序後重新啓動是從提升的命令提示運行app.exe start的唯一方法。

任何想法?

回答

4

好的,我修好了。服務啓動類型被設置爲自動,但我已將它們更改爲自動(延遲),現在所有的啓動都可以正常運行。

此外,我已經修改了安裝批處理文件以備將來使用:

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

只是一種猜測,但可能依賴於網絡服務,這可能無法使用。

+0

你剛剛救了我100年的信息垃圾挖掘:) – alerya

2

最有可能的答案是,在啓動時,當機器上發生其他事情時,容器的創建和解決需要很長的時間。當你手動完成時,沒有別的東西在爭奪資源。您可以推遲在您的容器中完成的一些工作,直到創建&開始後?你也可以要求更多的時間,但我不記得那些API是我的頭頂。

+0

好點,因爲每個應用都會在Amazon SQS上執行一些隊列處理,所以可能會有很高的CPU負載。啓動時,服務檢查隊列,從S3下載一些對象,處理它們,上傳回S3並寫入新的隊列消息。雖然我們每小時只處理幾十條消息,但它們在CPU資源上非常輕量級。但該機器是一個EC2微型實例,可能會導致所有6個服務失敗......雖然我不完全相信這是原因。我會嘗試禁用除了一個之外的所有內容,然後查看是否可以將其設置爲自動啓動。 –

+0

仍然沒有快樂。我購買了一個新的win2012虛擬機並安裝了一個服務並測試了它的運行。重新啓動後,它將保持停止狀態並且事件日誌顯示上述錯誤。如果我手動啓動服務立即運行。 –

+0

如果您可以創建一個簡單的複製並將其帶到郵件列表(https://groups.google.com/forum/?fromgroups#!forum/topshelf-discuss),那麼我們可以多幫一些忙。症狀仍然是同樣的問題,在啓動過程中需要很長時間。所以答案在某種程度上延遲了在啓動過程中需要花費的時間,但不會延遲。 – Travis