【问题标题】:Azure start-up task to run after the website is created创建网站后要运行的 Azure 启动任务
【发布时间】:2014-02-28 21:28:24
【问题描述】:

我为 Azure 网站创建了一个启动任务,该任务执行以下操作:

  • 创建应用程序池
  • 将虚拟目录转换为虚拟应用程序

我创建了一个执行这些任务的 powershell 脚本。

我已经在服务定义中设置了启动元素

<Startup>
  <Task commandLine="MyStartup.cmd" executionContext="elevated" taskType="simple">
    </Task>
</Startup>

到目前为止一切顺利。

但是,I've found out, rather late,那:

在启动任务阶段,IIS 可能未完全配置 启动过程,因此特定于角色的数据可能不可用。

我认为这意味着当运行 powershell 脚本时,该网站可能不存在于 IIS 上。我已经测试了脚本,果然它失败了,因为它在 IIS 上找不到虚拟目录。

我的问题是:有没有办法确保在 IIS 上创建网站之后运行 powershell 脚本?

请注意,如果可能的话,我真的不想使用Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart

提前致谢。

【问题讨论】:

  • 我们在 WebRoles 上为我们的产品使用 OnStart,它还不错。您可以创建自己的小型启动工厂,在 blob 存储上具有 powershell 脚本,然后在云服务启动时同步脚本,您可以将配置存储在 blob 存储中,也可以将配置存储到要运行的脚本。通过这种方式,您可以很容易地更新和维护您未来可能创建的 webroles 的启动体验。但启动任务将在 IIS 设置之前运行。我们的产品之一实际上是在 OnStart 中清理 IIS 并从 blob 存储中进行我们自己的网站设置。
  • @pksorensen 我不想使用 OnStart 的原因是这取决于 C#。如果我错了,请纠正我。
  • 您可以从 c# 启动进程或运行 powershell 脚本。

标签: iis azure azure-web-roles


【解决方案1】:

我遵循@kwill 的建议并创建了以下内容:

Powershell:

while(!($myWeb = Get-Website -name "*MyWeb*")){ 写入主机“网站未安装。等待 30 秒...” 开始睡眠 30 } # 继续安装

和配置

  <Task commandLine="MyBackground.cmd" executionContext="elevated" taskType="background">
  </Task>

这行得通。

【讨论】:

    【解决方案2】:

    查看http://blogs.msdn.com/b/kwill/archive/2011/05/05/windows-azure-role-architecture.aspx 的角色架构图。您可以看到在 IISConfigurator 为您的网站创建应用程序池之前执行了启动任务。这意味着您可以对应用程序池进行修改的唯一位置是 OnStart。

    我还没有尝试过,但是您可以创建一个后台类型的启动任务,让其余的启动过程(即运行 IISConfigurator)在您的启动任务仍在运行时继续进行,然后在该启动中循环直到检测到虚拟目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多