首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >主设备故障恢复后如何重新启动依赖服务

主设备故障恢复后如何重新启动依赖服务
EN

Stack Overflow用户
提问于 2018-06-02 16:49:22
回答 1查看 30关注 0票数 0

我有windows的服务,这是创建使用topshelf。有时此服务会被停止。所以我想让它自动重启。所以我们在顶层有一个onrecovery选项。现在我的问题是,当这个服务从故障中恢复时,我应该能够重新启动另一个服务,因为我的这个服务失败了。我将如何实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 00:45:23

首先,您应该让该服务依赖于另一个服务,以确保它正在运行。

在启动时,服务应向该服务发送命令以重新启动其逻辑。

对于接收命令的Topshelf服务,服务类应该实现ServiceCustomCommand,或者像这样设置它:

代码语言:javascript
复制
HostFactory.New(x =>
{
    x.Service<MyService>(sc =>
    {
        sc.ConstructUsing(() => new MyService());

        …

        // Handle custom commands
        sc.WhenCustomCommandReceived((service, control, command) =>
            service.CustomCommand(control, command));
    });
});

要向服务发送命令,可以使用ServiceControllerExecuteCommand

代码语言:javascript
复制
using (var thatService = new ServiceController("ThatService"))
{
    thatService.ExecuteCommand(0);
}

如果您不能向该服务发出命令,您还可以使用ServiceControllerStopStart该服务:

代码语言:javascript
复制
using (var thatService = new ServiceController("ThatService"))
{
    thatService.Stop();
    SpinWait.SpinUntil(() =>
        {
            thatService.Refresh();
            return thatService.Status == ServiceControllerStatus.Stopped;
        });
    thatService.Start();
    SpinWait.SpinUntil(() =>
        {
            thatService.Refresh();
            return thatService.Status == ServiceControllerStatus.Running;
        });
}

或者,您的恢复必须是重新启动该服务并启动该服务的命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50655134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档