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 包