【问题标题】:Automatic services do not start自动服务不启动
【发布时间】:2013-07-11 07:00:03
【问题描述】:

我安装了一些控制台应用程序作为在 topshelf 下运行的服务,如果我手动安装和运行它们可以正常工作。但是,即使启动类型设置为自动,也不会自动启动。

应用配置如下:

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

执行批处理文件后,服​​务按预期运行。但是,如果我重新启动,它们仍然停止。

事件日志为每个服务返回相同的一对事件:

事件 7000:由于以下错误,服务无法启动: 服务没有及时响应启动或控制请求。

事件 7009:等待服务连接时超时(30000 毫秒)。

重新启动后启动应用程序的唯一方法是从提升的命令提示符运行app.exe start。

有什么想法吗?

【问题讨论】:

    标签: windows-services windows-server-2008-r2 windows-server-2012 topshelf


    【解决方案1】:

    好的,我已经修好了。服务启动类型设置为自动,但我已将它们更改为自动(延迟),现在所有启动都可以正常运行。

    我还修改了安装批处理文件以供将来使用:

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

    只是猜测,但可能取决于可能不可用的网络服务。

    【讨论】:

    • 你让我在信息垃圾中挖掘了 100 年 :)
    【解决方案2】:

    最可能的答案是,当机器上发生其他事情时,在启动期间创建和解析容器需要很长时间。当您手动执行此操作时,没有其他东西在争夺资源。您可以将容器中完成的一些工作推迟到创建和启动之后吗?您也可以请求更多时间,但我不记得那个 API 是在我脑海中浮现的。

    【讨论】:

    • 很好,CPU 负载可能很高,因为每个应用程序都在 Amazon SQS 上进行一些队列处理。服务启动时检查队列,从 S3 下载一些对象,处理它们,上传回 S3 并写入新的队列消息。虽然我们每小时只处理几十条消息,但它们在 CPU 资源上非常轻量级。但是这台机器是一个 EC2 微实例,可能峰值可能导致所有 6 项服务都失败......虽然我不完全相信这是原因。我将尝试禁用除一个以外的所有功能,看看是否可以让它自动启动。
    • 仍然没有喜悦。我拿了一个新的库存win2012 vm并安装了一个服务并测试了它的运行。重新启动后,它仍然停止并且事件日志显示上述错误。如果我手动启动服务以立即运行。
    • 如果您可以创建一个简单的复制品并将其发送到邮件列表 (groups.google.com/forum/?fromgroups#!forum/topshelf-discuss),那么也许我们可以提供更多帮助。症状还是一样的问题,就是开机时间太长了。因此,答案是以某种方式延迟启动过程中花费的时间过长,但不会延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2018-09-20
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多