【问题标题】:Start-Sleep isn't working in Runbook powershell workflowStart-Sleep 在 Runbook powershell 工作流程中不起作用
【发布时间】:2021-07-10 10:32:43
【问题描述】:

我正在尝试在 Azure 自动化帐户的 Runbook 中使用 Start-Sleep/Sleep。我注意到 sleep 命令没有生效,但它在本地生效。进一步的指令继续执行,就好像没有Sleep。我也试过Wait-Event -Timeout。我尝试将命令放入和取出InlineScript 部分。

我错过了什么?只有我面临这个问题吗?

powershell 工作流程如下所示:

workflow W{
    Disable-AzureRmTrafficManagerEndpoint..
    Start-Sleep -Seconds 5
    Stop-AzureWebsiteJob..
    Start-Sleep -Seconds 5
    Start-AzureWebsiteJob..
    Start-Sleep -Seconds 5
    Restart-AzureRmWebApp..
    Start-Sleep -Seconds 5
    Enable-AzureRmTrafficManagerEnpoint..
}

因此,如果没有睡眠,上述指令将被执行。端点被流量管理器禁用和启用,然后我看到 webjob 停止和启动的其他状态。睡眠不生效。

【问题讨论】:

  • 这是在工作流的根部,还是在其他块内?如果您发布一个显示问题的示例工作流程,帮助您解决问题会容易得多
  • 我添加了一个与我正在做的事情类似的例子。我会在闲暇时尝试一些较长的睡眠时间,比如 Print 1.. sleep for 1000 seconds... Print 2. 我会看看效果如何。
  • 你怎么知道没有睡眠发生?您如何准确地观察这一点?如果这是您的确切工作流程代码,我严重怀疑是否有任何理由跳过睡眠。如果您查看 Azure 门户上的作业输出,请记住此输出是缓冲的,因此可能会同时显示所有日志。如果您可以在其间添加带有时间戳的日志记录语句,这可能会有所帮助。
  • 谢谢,阿纳托利。我通过记录时间戳检查睡眠是否有效。该工作流对两个端点具有相同的指令集。我在门户中看到一个端点被禁用和启用。第二个端点被禁用。然后与第一个端点对应的 Web 作业显示在 azure 门户中停止或启动。不确定,可能是由于某处的一些延迟。但你是对的。睡眠按预期工作。这完成了这篇文章的目的。我会做一些进一步的调试以获得更多的清晰度。也许我可以尝试在运行手册本身中打印 webjob 状态。

标签: azure powershell sleep azure-automation azure-runbook


【解决方案1】:

工作流设计用于以非阻塞方式并发执行多个语句 - 无法保证工作流引擎会等待前一个语句返回。

如果要确保多个语句按顺序同步执行,请使用sequence block

workflow myWorkFlow {
  sequence {
    Do-Something
    Start-Sleep -Seconds 2
    Do-SomethingElse
  }
}

...或者,除非您使用任何特定于工作流的功能,否则请使用常规 PowerShell Runbook 而不是工作流。

【讨论】:

  • 谢谢马蒂亚斯。不知道为什么有人投了反对票。我检查了long description。它说workflow activities run sequentially by default。根据 Anatoli 的评论,我通过在适当的位置记录时间戳来确认这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2019-08-16
  • 2019-01-15
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多