2

我已经为 Azure 应用程序构建了一个启动任务,其中包含 exe 文件(以一定的时间间隔定期运行),现在我想让它每周自动更新,就像我之前在这里问过的那样

但是,我将通过该 exe(启动任务)执行一些替换该文件的逻辑,然后它也不会对新文件产生任何影响。我得出的结论是,只有当我们使用新文件升级/创建该 azure 项目时,新的启动任务才会生效。(如果我理解错了,请纠正我)

那么有什么方法可以通过重启实例(通过 exe/startuptask)来完成我的逻辑工作吗?我认为它也会使用原始文件(在升级/创建应用程序时添加到启动任务中)而不是新文件!

有可能吗?

4

2 回答 2

3

这是一个非常不可靠的解决方案。如果 Azure 实例崩溃或因更新而停止运行,您将从原始服务包启动一个新实例。修改后的实例的所有状态都将丢失。

一种更可靠的方法是将易失性可执行文件存储在 Azure Blob 存储等某个位置。您将新版本上传到 blob 存储,角色以某种方式看到(通过轮询存储或某些用户调用的操作 - 没关系),下载新版本并用新版本替换现有版本。

这样,如果您的角色崩溃,它将在启动时可靠地从持久存储中获取最新版本。

于 2012-05-28T13:54:59.263 回答
1

在我研究了你的问题之后,我可以提出一个非常简单的解决方案,如下所示,我之前为 Tomcat/Java 示例做过:

准备您的 EXE 以重新启动 VM 以及您的原始代码

  1. 在您的 EXE 中,创建一个方法以在 Azure 存储中以特定间隔查找特定 XML 文件,还添加重试逻辑以访问 XML
  2. 解析 XML 以获取特定值,如果设置了特定值,则重新启动机器
  3. 以 ZIP 格式打包您的 EXE 并放置在您的 Azure 存储中
  4. 确保将 XML 放在 Cloud 上并设置 reboot = false 值

在启动任务中做什么:

  1. 创建启动任务并从包含您的 EXE 的 Azure 存储下载 ZIP
  2. 下载后解压文件并将EXE放到指定文件夹
  3. 启动EXE

当您想要更新 EXE 时该怎么做:

  1. 更新您的 EXE,打包成 ZIP 并放置在同名的 Azure 存储中的同一位置
  2. 更新您的 XML 以启用重新启动

更新将如何发生:

  1. EXE 将在某些内部按设计后查找 XML
  2. 一旦它看到重新启动设置,它将重新启动虚拟机
  3. 重新启动后,启动任务将启动,您的新 EXE 将下载到 Azure VM 并进行更新。确保下载和更新在同一个文件夹中完成。

看看下面使用类似方法的示例中的 Startup tak:http: //tomcatazure.codeplex.com/

于 2012-05-29T06:16:55.400 回答