5

Tôi có một số ít các ứng dụng giao diện điều khiển được cài đặt như các dịch vụ đang chạy dưới phần trên cùng và nếu tôi cài đặt và chạy thủ công chúng hoạt động tốt. Tuy nhiên không có tự động bắt đầu mặc dù loại khởi động được đặt thành Tự động.Dịch vụ tự động không bắt đầu

Các ứng dụng được cấu hình như sau:

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

Các ứng dụng chạy dưới Win 2008 R2 và chúng được cài đặt sử dụng một tập tin batch thực hiện như quản trị. Tệp lô bao gồm:

app.exe install --sudo 
app.exe start 

Sau khi thực thi tệp hàng loạt dịch vụ chạy như mong đợi. Tuy nhiên nếu tôi khởi động lại chúng vẫn dừng lại.

Nhật ký sự kiện trả về cặp cùng các sự kiện cho mỗi dịch vụ:

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.

Cách duy nhất để bắt đầu ứng dụng sau khi khởi động lại là chạy app.exe start từ một dấu nhắc lệnh nâng lên.

Bất kỳ ý tưởng nào?

Trả lời

4

OK tôi đã sửa nó. Các kiểu khởi động dịch vụ được đặt thành Tự động nhưng tôi đã thay đổi chúng thành Tự động (Trì hoãn) và tất cả bây giờ chạy đúng khi khởi động.

Ngoài ra tôi đã sửa đổi các cài đặt tập tin batch để sử dụng trong tương lai:

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

Chỉ có một đoán, nhưng có lẽ phụ thuộc vào dịch vụ mạng mà có thể không có sẵn.

+0

Bạn vừa tiết kiệm cho tôi 100 năm đào bới trong thùng rác của thông tin :) – alerya

2

Câu trả lời có khả năng nhất là mất quá nhiều thời gian để vùng chứa được tạo và giải quyết trong khi khởi động khi các nội dung khác đang diễn ra trên máy. Khi bạn làm điều đó bằng tay, không có gì khác là cạnh tranh cho các nguồn lực. Bạn có thể trì hoãn một số công việc được thực hiện trong vùng chứa của mình cho đến khi sau khi tạo & bắt đầu không? Bạn cũng có thể yêu cầu thêm thời gian, nhưng tôi không nhớ lại API đó trên đầu của tôi.

+0

Điểm tốt, có thể có tải CPU cao vì mỗi ứng dụng thực hiện xử lý hàng đợi trên SQS của Amazon. Khi khởi động dịch vụ kiểm tra hàng đợi, tải xuống một số đối tượng từ S3, xử lý chúng, tải lên S3 và viết một thông báo hàng đợi mới. Mặc dù chúng tôi chỉ xử lý vài chục tin nhắn mỗi giờ nhưng chúng rất nhẹ trên tài nguyên CPU. Nhưng máy tính là một trường hợp vi EC2 và có thể là tăng đột biến có thể gây ra tất cả 6 dịch vụ thất bại ... mặc dù tôi không hoàn toàn tin rằng đây là nguyên nhân. Tôi sẽ thử vô hiệu hóa tất cả trừ một và xem liệu tôi có thể làm điều này để tự động khởi động hay không. –

+0

Vẫn không có niềm vui. Tôi lấy một cổ phiếu mới win2012 vm và cài đặt một dịch vụ duy nhất và kiểm tra hoạt động của nó. Sau khi khởi động lại nó vẫn dừng lại và bản ghi sự kiện cho thấy lỗi trên. Nếu tôi tự khởi động dịch vụ để chạy ngay lập tức. –

+0

Nếu bạn có thể tạo một bản sao đơn giản và đưa nó vào danh sách gửi thư (https://groups.google.com/forum/?fromgroups#!forum/topshelf-discuss) thì có lẽ chúng tôi có thể trợ giúp thêm một chút. Các triệu chứng vẫn còn của cùng một vấn đề, nó mất quá lâu trong thời gian khởi động. Vì vậy, câu trả lời là bằng cách nào đó trì hoãn bất cứ điều gì là dùng quá lâu trong thời gian khởi động nhưng không muộn hơn. – Travis