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

Приложения работают под Win 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. При запуске служба проверяет очередь, загружает некоторые объекты из S3, обрабатывает их, загружает обратно на S3 и записывает новое сообщение очереди. Хотя мы имеем дело только с несколькими десятками сообщений в час, они очень легки на ресурсе процессора. Но машина представляет собой экземпляр EC2 micro, и, возможно, шип может привести к сбою всех 6 сервисов ... хотя я не совсем уверен, что это причина. Я попробую отключить все, кроме одного, и посмотреть, могу ли я запустить это для автоматического запуска. –

+0

Еще не радость. Я взял новый запас win2012 vm и установил один сервис и протестировал его работу. После перезагрузки он остается остановленным, и журнал событий показывает указанную выше ошибку. Если я вручную запустил службу для запуска сразу. –

+0

Если вы можете создать простое воспроизведение и привести его в список рассылки (https://groups.google.com/forum/?fromgroups#!forum/topshelf-discuss), возможно, мы сможем немного помочь. Симптом по-прежнему остается одной и той же проблемой, он слишком долго во время запуска. Таким образом, ответ - это как-то задержка, что происходит слишком долго во время запуска, но не позже. – Travis