Start-Sleep 在 Runbook powershell 工作流程中不起作用

Posted

技术标签:

【中文标题】Start-Sleep 在 Runbook powershell 工作流程中不起作用【英文标题】:Start-Sleep isn't working in Runbook powershell workflow 【发布时间】: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 状态。 【参考方案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 的评论,我通过在适当的位置记录时间戳来确认这一点。

以上是关于Start-Sleep 在 Runbook powershell 工作流程中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我是否必须在powershell Runbook(azure)中导入模块?

新版Azure Automation Account 浅析 --- 用Runbook管理AAD Application Key

在 Azure Runbook 上运行“mysqldump”

在 Azure 自动化 Runbook 中安装和导入 Python 包

如何根据 clientid 和客户端密码在 Runbook 中运行 powershell 脚本

Azure Runbook检查状态