实例重启时,辅助工作者角色e:\ approot文件夹的内容消失

时间:2011-11-24 13:50:03

标签: azure azure-worker-roles

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

单击门户网站上的“重新启动”按钮。等待重启,然后RDP再次进入实例 - test.txt不再存在。

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