0

我现在在测试平台 EC2 节点上运行了一个相当简单的 Windows 服务,基本上:

  • 服务启动时在我们本地数据中心的机器上调用 Web 服务(该服务设置为自动启动,因此它在实例上线时运行)。
  • 每分钟调用一次另一个 Web 服务作为监控心跳。
  • 服务停止时调用第三个 Web 服务。

我们在我们的 Linux EC2 实例中使用它非常好,并且 Windows 服务在启动、检测信号和手动停止时运行良好。

问题是当通过 ElasticFox、Rightscale 等终止节点时,服务似乎永远不会停止,或者至少,它永远不会调用 Web 服务。有什么想法吗?

[请注意,这是从我在 AWS 开发人员论坛上的帖子逐字复制的,但与 SO 相比,这是超低流量。道歉!]

编辑:关于网络故障这一点,我也不是最精通 Windows 服务的人,如果我将 Netman 设置为服务依赖项,是否可以保证服务终止的顺序尊重这一点?

关于 EBS,我们为在普通 Linux 实例上运行的类似系统采用的模型将应用服务器视为短暂的,因此 EBS 不会给我们带来太多好处。我们在 EC2 之上使用 Rightscale,这使得连接到 Linux 实例的功能关闭,因此我们只需将实例的日志发送到其他地方。

编辑#2:嗯,我得到 AWS 工作人员的回复比我预期的要快得多:

对于 Windows,由于某些技术限制,通过 API(即通过 elasticfox、rightscale 等)终止是硬关机。这意味着它就像用电源按钮关闭机器而不是关机。

有趣的..

4

2 回答 2

1

当 Windows 关闭时会发生很多事情,所以我的猜测是您的 Web 服务调用需要的东西已经停止,首先猜测是网络连接。

这有点棘手,因为您无法在 C 或 D 驱动器上保留本地日志文件来检查调用是否至少尝试过,因为一旦实例停止,您将永远无法再次访问它们。您是否将 EBS 卷与可以保存日志文件的实例一起使用?

于 2009-03-26T00:16:30.433 回答
1

我使用新的 Windows EBS 根卷测试了启动和关闭组策略脚本。当您停止和启动这些实例时,这两个脚本都会在适当的序列中按预期运行。因此,另一种方法可能是使用 EBS 根卷运行您的实例并发出停止命令以确保 Windows 实例执行所有关闭序列。停止实例后,您应该能够终止实例并释放与其关联的任何 EBS 卷。

于 2009-12-19T15:26:54.453 回答