我正在使用该golang.org/x/sys/windows/svc
软件包在Go中编写Windows服务。
到目前为止,一切都很顺利,而且很容易上手,我喜欢它。
我已经编写了一些自动更新功能,并且希望该服务在完成更新后重新启动。
我尝试生成一个进程,该进程将使用来重新启动服务SCM
,但它会记录一条错误消息,该消息似乎与尝试在作为本地系统运行时尝试控制该服务有关。
The service process could not connect to the service controller.
更好的方法是,将os.Exit(1)
服务Failure Actions
设置为Restart on Failure
,效果很好!
唯一的麻烦是,似乎没有使用Go编程配置这些选项的功能。
我已经做了一些挖掘,看起来它们是通过将结构传递给ChangeServiceConfig2
in 来配置的advapi32.dll
-如何创建在崩溃时重启的服务
在 golang / sys / blob / master / windows / svc / mgr / config.go中 -func updateDescription(handle windows.Handle, desc string) error
该代码已经调用windows.ChangeServiceConfig2
,它是DLL调用的链接。
SERVICE_FAILURE_ACTIONS
结构的Microsoft文档在这里。
我在弄清楚如何使用Go构建和传递该结构时遇到了麻烦-是否有人有任何见解?
在从这里获得一些指导之后,再通读现有Go WindowsService界面的源代码,我提出了自己的答案,我将在下面尝试记录。
对于类型参考使用Windows DLL的工作时,MSDN文档在这里。
我的代码如下所示:
import (
"unsafe"
"golang.org/x/sys/windows"
)
const (
SC_ACTION_NONE = 0
SC_ACTION_RESTART = 1
SC_ACTION_REBOOT = 2
SC_ACTION_RUN_COMMAND = 3
SERVICE_CONFIG_FAILURE_ACTIONS = 2
)
type SERVICE_FAILURE_ACTIONS struct {
ResetPeriod uint32
RebootMsg *uint16
Command *uint16
ActionsCount uint32
Actions uintptr
}
type SC_ACTION struct {
Type uint32
Delay uint32
}
func setServiceFailureActions(handle windows.Handle) error {
t := []SC_ACTION{
{ Type: SC_ACTION_RESTART, Delay: uint32(1000) },
{ Type: SC_ACTION_RESTART, Delay: uint32(10000) },
{ Type: SC_ACTION_RESTART, Delay: uint32(60000) },
}
m := SERVICE_FAILURE_ACTIONS{ ResetPeriod: uint32(60), ActionsCount: uint32(3), Actions: uintptr(unsafe.Pointer(&t[0])) }
return windows.ChangeServiceConfig2(handle, SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&m)))
}
在我的基本示例中,您需要传递服务句柄,然后将失败操作设置为硬编码默认值:
我刚刚测试过,看来工作正常。
问题内容: 在昨天发布的另一个问题中,我对如何在Windows中将Python脚本作为服务运行提供了很好的建议。我唯一想知道的是:Windows如何了解可以在本机工具(“管理工具”中的“服务”窗口)中管理的服务。即 在Windows下,等效于在Linux下将启动/停止脚本放在/etc/init.d中的Windows是什么? 问题答案: 与Windows中大多数“可感知”的东西一样,答案是“注册表”
From time to time you may find yourself facing a daunting task: building a server that really isn’t allowed to fail, a project where the cost of error is extraordinarily high. What is the methodology
问题内容: 尽管这可能是Java Web Services的副本,但我想知道从哪里开始和继续。过去,我花了很多时间来找到从哪里开始,但我却没有。阅读有关Web服务的页面时,有很多术语和混乱(至少对我来说是如此!)。有很多术语- 例如Web Service和其他我不知道的术语。该用户组可以合并并提供易于理解和遵循的Java Web Services的高级概述吗?我感谢您的好意,并感谢您的帮助。 问题
我不是指SMTP/IMAP客户端,我指的是一个可以接收和发送电子邮件的工作SMTP服务器。 有很多只监听SMTP连接的部分PHP和Go SMTP服务器的例子——难道没有任何例子说明如何发送邮件吗? 我对学习简单邮件传输协议的后半部分非常感兴趣。我知道有很多糟糕的服务器与标准不同,但我想了解整个协议从头到尾是如何实现的。
本文向大家介绍Python编写Windows Service服务程序,包括了Python编写Windows Service服务程序的使用技巧和注意事项,需要的朋友参考一下 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装(注意下载符合自
前几天,我们的节奏设置遇到了一些问题。我们的一个机器实例开始将CPU使用率提高到90%,所有入站工作流执行都停留在“计划”状态。检查日志后,我们注意到匹配的服务抛出了以下错误: 重启工作流后,一切都恢复正常,但我们仍在努力弄清楚发生了什么。在这个事件发生的那一刻,我们并没有带来任何繁重的工作负载,它只是突然发生的。我们的主要怀疑是,可能匹配服务在这个事件中失去了与cassandra数据库的连接,就