自动更新启动任务将在 Azure 应用程序中工作



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

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

那么有没有办法通过重新启动实例(通过exe/startuptask)来完成我的逻辑工作?我认为它还将采用原始文件(在升级/创建应用程序时在启动任务中添加)而不是新文件!

可能吗?

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

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

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

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

准备 EXE 以使用原始代码重新启动 VM

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

在启动任务中要做什么:

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

当您想要更新 EXE 时要做什么:

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

更新将如何发生:

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

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

最新更新