2

从 Azure 门户中重新启动 Windows Azure 辅助角色实例时,是否删除了 e:\approot 文件夹的内容?我有一个提升的启动任务,它在添加一些注册表设置之前检查此文件夹中是否存在文件。这在过去有效,但现在失败了,因为它期望找到的文件在门户引起的重新启动后不再存在。如果我在启动任务中执行“关闭”命令,实例会重新启动,但 e:\approot 的内容不受影响。

4

4 回答 4

5

正如其他人已经说过的那样,驱动器的内容在重新启动时不会丢失。最有可能发生的是您在启动任务中硬编码“e:\approot”。你不应该这样做。我会冒险猜测,当您重新启动时,驱动器已移至 f:\ 或其他驱动器。我已经看到了很多。

相反,您应该引用 %ROLEROOT% 环境变量。这将在重新启动时指向正确的驱动器和路径(例如“%ROLEROOT%\AppRoot”),无论驱动器实际移动到何处。

于 2011-11-24T20:52:03.170 回答
2

我不相信 e:\approot 的内容会“消失”。我的意思是原始内容。

这是你的角色代码所在的位置,所以不会以任何方式被删除,否则你的角色根本不起作用。它可能会在每次重新启动时重新启动,但我真的怀疑这是真的。

如果您使用启动任务来检查您手动添加的内容,我建议您使用Local Storage Resource。将不属于您的原始包部署的任何内容保存在本地资源中。您可以选择在角色“回收”时保留此文件夹的内容(或清理它)。

如果您的启动任务正在检查您的角色代码/包的某些内容是否存在,我建议您在您正在使用的 cmd/batch 文件中实现一些等待逻辑。并且还将启动任务标记为“后台”类型,这样就不会阻塞实例启动。正如我所说,e:\approot 不能为空,因为这是您的代码所在的位置!内容可能稍后会出现,但肯定不会空着。

于 2011-11-24T14:09:17.390 回答
0

您不能指望本地更改仍然存在(或不存在)更新或重新启动 - 更改可能会持续存在或可能会丢失。

您的代码应设计为考虑到这一点。您可以在本地存储临时数据以更快地恢复,但不能保证数据的持久性,因此您应该将这些数据保存在一些持久存储中,如 SQL Azure 或 Azure 存储。

您看到的行为可能是由安装软件更新引起的。我不确定它是如何工作的,但想象一下 Azure 基础架构决定在您的一些实例 VM 上滚动 Windows 更新。安装更新可能需要很长时间,因此 Azure 只会停止您的实例,然后启动另一个(已更新)干净的 VM,并在那里部署和启动您的角色实例。如果发生这种情况,所有本地更改当然会丢失 - 您的实例将在全新的干净 VM 上启动,并且您当前的 VM 将被丢弃。这只是一个猜测,但我想这很现实。

于 2011-11-24T14:16:05.803 回答
0

答案是在 Azure 门户上单击“重新启动”按钮时,AppRoot 文件夹的内容将被删除并重新部署包。

要进行测试,请将某些东西(任何东西......)部署到 Azure 实例。RDP 到实例上并在 AppRoot 文件夹中创建一个文件 (test.txt)(这将在 E: 或 F: 驱动器上)。

单击门户上的重新启动按钮。等待重新启动,然后再次将 RDP 放到实例上 - test.txt 不再存在。

请注意,如果您 RDP 到实例上并从 Windows UI 中选择重新启动,则不会删除 test.txt。

于 2011-11-26T17:56:07.447 回答