Azure:如何确保每台服务器只调用一次 Runbook

Azure: how can I make sure Runbook invoke only one time per server

我在 Azure 上有虚拟机。每个主虚拟机有几个计算节点 运行 Slurm.

当一个作业完成时,Slurm 关闭脚本删除的计算节点和主节点保留 运行。我也想关master

我创建了一个关闭主服务器的 Azure Runbook。 我可以在关闭计算节点的脚本中添加一行来调用该 Runbook。

问题:

每个计算节点都会发送关闭其master的请求,少数计算节点也是如此。同一个请求多次发送是什么原因

是否有任何方法可以在 Runbook 中知道已收到关闭特定 master 的请求并跳过所有其他关闭同一 master 的请求。 我可以锁定 Runbook 或打开请求已提交的标记吗?

谢谢。

也许最简单的方法是使用自动化变量,如下所示:

$alreadySent = Get-AutomationVariable -Name ShutdownRequestSent
if (-not $alreadySent) {
    # Send shutdown request
    ...
    Set-AutomationVariable -Name ShutdownRequestSent -Value $true
}

您将不得不弄清楚何时以及如何将变量再次重置为 $false。

这个解决方案很简单,但并不完全可靠,对您的情况可能还不够。例如,如果 运行 这本书的两个作业大约同时到达 Get-AutomationVariable 命令,它们都会发送一个关闭请求。或者,如果发送关闭请求的作业在执行 Set-AutomationVariable 之前因任何原因崩溃,则下一个作业将发送第二个关闭请求。我不知道这对你来说是否是个问题。如果您需要更强的 运行-once 保证,请考虑使用 Lease Blob