上周对现场windows网关进行软件安装时,发现一个问题。就是部分网关内的软件没有升级成功,原因有多个,不过其中有一个盒子,情况比较有意思,就是盒子中用go写的服务都没有真正处于运行状态,而是处于SERVICE_START_PENDING状态。因为这个原因,导致程序无法升级。
一开始只是怀疑这个问题是nssm配置不对引起的,不过后来我重新做了测试验证,发现,与猜测的不符合。
周末上网查了下资料,发现,golang开发的程序,作为windows系统的服务,一直有这个老问题。就是启动超时,导致服务无法运行。链接如下,https://github.com/golang/go/issues/23479,
解决这种问题的办法:
1. 从golang官方open的issue(就是上面的链接)中,别人踩坑后的总结出来的方法。
golang开发的程序,不作为服务运行,而是被另一个服务程序(用c/c++开发)拉起来。
2. 修改服务的启动方法
将服务的启动方式从自动改为自动延时,详细见下面的链接
How to extend the timeout for services if they fail to start or stop